Giving the pet archive a proper home

The pet archive had been one of those half-finished ideas I kept meaning to come back to. It started as a small personal page, then sat quietly while the rest of the site changed around it. When I returned to it, I wanted it to feel less like a folder of uploaded images and more like a real little corner of the site: organized by pet, easy to browse, and built with enough care that it could keep growing over time.

The data model now treats pets and photos as separate things. A pet can have life dates, a stable slug, a profile photo, and a display priority. A photo can be connected to more than one pet, carry a short description, and keep the date it was taken when that information is available. That shape matters because a lot of the best pictures are shared moments, and I did not want to duplicate the same file just because two names belonged beside it.

The upload path borrows from the ShareX storage work already in the site. Admin uploads go through the shared-file pipeline, validate that the file is an image, strip embedded EXIF data, and try to infer the photo date from the filename or image metadata before falling back to the upload time. The public pages then redirect image requests through the stored file variants, so the pet pages can use thumbnails, larger gallery images, and lightweight placeholders without each feature needing its own separate storage system.

On the visitor side, the goal is simple: make it pleasant to wander. The main page can be filtered by name or status, sorted by the order I choose, alphabetically, or by photo count, and each pet page can be searched, filtered by year, and opened into a lightbox. It is intentionally modest, but it gives the archive enough structure to feel like a project rather than a loose pile of files.

I also liked the excuse to go back through older pictures. Building the feature meant seeing faces from different parts of my life again: pets that are still here, pets I miss, and small ordinary photos that are worth keeping because of who was in them. That is the best kind of personal project for me, where the implementation is interesting but the reason for building it stays close to home.

View the pet archive