Unnoticed app icon

Description

Unnoticed is a collaborative photography app. Users create trips, take photos in rounds based on creative prompts assigned by role, and vote for the best shots. Photos are protected with end-to-end encryption: not even the server can see them — only the trip participants can.

Collaborative project developed at the Apple Developer Academy in Naples with an international team. It’s the most complete and ambitious project I’ve led at the Academy.

Problem

Group photography activities lack structure and fun. Existing photo-sharing apps don’t create a collaborative game experience with creative constraints. We wanted something that would motivate people to see the world from different perspectives, guided by prompts and assigned roles.

My role

Tech lead and project lead. I defined the complete architecture (monorepo, backend, database, cloud storage), gathered requirements with the team, implemented the backend and REST API, designed the product lifecycle, chose the infrastructure, configured the development environment, and established the working methodology (Scrum with Jira, CI/CD). I also led the overall team organization: sprint planning, work division, and code quality standards.

Technical decisions

  • Monorepo: a single source of truth for iOS, backend, and landing page. Makes it easy to share configuration and for the whole team to understand the complete architecture.
  • Cloudflare R2 over Amazon S3: chosen for the price (no data egress charges), ease of setup, and compatibility with the S3 API for a potential future migration.
  • End-to-end encryption: the server is zero-knowledge. Photos are encrypted before leaving the phone and only participants’ devices can decrypt them. I led the decision and requirements; the implementation was carried out by a teammate.
  • Smart image caching: in-memory and disk caching system with request deduplication. Later adapted to handle encrypted photos: decrypts once and stores the result.
  • No login/registration: a product decision to prioritize onboarding speed in the prototype. Users can create or join a trip in seconds.
  • Trip lifecycle: a state machine that guides the entire product experience, from trip creation to final results.

Key learnings

  • Leading a team isn’t doing everything: it’s creating the conditions for the team to work well. Defining architecture, standards, and processes is as important as writing code.
  • Knowing how to delegate and define clear requirements is as valuable as implementing. E2E encryption is the feature I’m most proud of, and I didn’t write it.
  • The most frequent problems in team development aren’t technical bugs — they’re about collaboration and code quality. Establishing development rules early saves hours of merge conflicts.
  • Choosing the right infrastructure (R2 vs S3, monorepo vs multi-repo) are decisions that impact the entire project lifecycle.