Table of Contents
About The Project
The name
Photo Club Waalre is a photography club named after Waalre, a town in the south of The Netherlands. Since 1988 its club members meet to critique each other’s photos, organize excursions, and hold yearly photo expositions.
Portfolios
The goal of this app is to showcase curated work of members of photo clubs.
The work is organized into portfolios
. Each portfolio covers that part of a photographer's work that was shared within a photo club. If a photographer is (or was) a member of more than one of the supported photo clubs, the app will contain multiple portfolios for that photographer.
Each portfolio is shown in chronological order, with the latest work shown first, and typically spans multiple years.
Built With
Getting Started
To get a local copy up and running, use GitHub’s Open with Xcode
feature, compile and run on a simulator or physical device. Those who prefer running git from the command line should be able to manage on their own.
Installation
Usage and features
Opening animation
When the app opens, it shows a large image corresponding to the app’s icon. If you tap somewhere inside the image, it zooms out to show the full image representing how digital cameras see color.
This involves a Bayer color filter array that filters the light per pixel. The filter array is shown here superimposed on a colorful photo.
Tapping inside the image allows you to zoom in or out to your heart's content. Tapping outside the image area ends the animation. You can trigger the animation again by restarting the app. A single tap outside the image allows you to skip the animation entirely.
The screens
Portfolios
shows the available portfolios (gallery of images of a photographer in the context of one club). Clicking on one item shows adetail
screen with the contents of the selected portfolio. Swiping left can, in exceptional cases, be used to delete an entry. TheSearch
bar filters the list of portfolios.Settings
allows you to configure what types of members you want to see in the list of Portfolios.Readme
contains a scrollable explanation, similar to what you are reading.Photo clubs
lists the photo clubs that are currently loaded. A purple pin on the map show the location of the club's club house (where they meet). A blue pin shows the location of other loaded photo clubs. A lock icon selects whether a map can be zoomed and panned, or is pinned in place.Photographers
lists the photographers currently loaded into the app. It gives information which is club-independent. The entries may store birthdays, and clickable links to personal (club-independent) photography sites. TheSearch
bar filters the list of portfolios.
Multi-club support
Version one the app only supported Photo Club Waalre (aka Fotogroep Waalre), but Version 2 supports multiple photo clubs. For a preview, drag down (“pull to refresh”) the Photo Club page. This loads just enough test data to show what multi-club support looks like.
Roadmap
- Distribute the source code on GitHub
- Publish article to get attention in Dutch photo club organization
- MemberListView: show thumbnails of most recent photos
- MemberListView: remove members who are removed on server
- MemberGaleryView: use of WebKit by SwiftUI equivalent
- Support onboarding of clubs without code changes
- Notifications of portfolio changes (?)
See the open issues for a full list of proposed features (and known issues).
Contributing
All contributions are greatly appreciated.
Areas for contribution
Welcome contributions include adding features, code improvements, ideas on architecture and interface definition, and possibly even a backend.
Contributions that don't require coding are also welcome: beta testing via TestFlight, feature requests, translations, SVG icon design, and maybe UI/UX design.
One likely big change
A central design challenge for a next stage will be to provide a clean, standardized interface to retrieve data per photo club. The interface is needed to load the data, but also keeps the data within the app up to date. After all, membership data and portfolios change regularly. The current interface is essentially a plug-in design with an adaptor per photo club. This needs to be replaced by a standard data interface to avoid having to extend the source code whenever a new club comes aboard.
The app currently uses a software module per club. That module loads membership and portfolio data from the club’s server and merges it into the in-app database. For Photo Club Waalre, the membership data is read from a HTML table on a password protected part of the club’s website. The portfolios use a somewhat more robust solution: they are read from XML files generated by a Lightroom Web plug-in called JuiceBox-Pro Thus portfolios are created and managed as Lightroom collections. These collections are then uploaded to the webserver with a single Upload click (thus triggering JuiceBox-Pro) where they can be downloaded by the app.
How to contribute
If you have a suggestion that would make this better, you can fork the repo and create a pull request. The command line git
commands to do this (but the Xcode IDE has equivalent commands under Source Control
):
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature
) - Commit your Changes (
git commit -m 'Add some AmazingFeature'
) - Push to the Branch (
git push origin feature/AmazingFeature
) - Open a Pull Request
You can alternatively submit an issue
with a tag like ”enhancement" or “bug” without having to do the code changes yourself.
About the model
The app uses a Swift-style MVVM design, meaning the model data is stored in structs (and in database tables) rather than in classes. As an intro for developers, here is a quick tour of the model.
Every PhotoClub
has zero or more Members
of various types (current, former, etc.). Some of these Members
have a formal role like chairman within the PhotoClub
. We will come back to why Member
is not visible in the model in a moment.
Some of information about a Photographer
(like name, birthday, a personal website) is unrelated to the Photographer's
Member
ship of a PhotoClub
.
Portfolios
represent the body of work of a Photographer
in the context of a single PhotoClub
. A Portfolio
contains Images
, but an Image
could be in multiple Portfolios
- depending on where the Image
was shared.
Member
and Portfolio
can be considered synonyms from a modeling perspective: we create exactly one Portfolio
for each PhotoClub
that a Photographer
joined. And every Member
of a PhotoClub
has exactly one Portfolio
in the app. Therefore Member
and Portfolio
are from a formal perspective synonyms, and thus modelled as a single concept or table.
License
Distributed under the MIT License. See LICENSE.txt
for more information.
Contact
Peter van den Hamer - [email protected]
Project Link: https://github.com/vdhamer/PhotoClubWaalre
Acknowledgments
- The opening image animation uses an image by Greetje van Son.