DEV Community

Cover image for Passion Lens: Discover the Passion Hidden in Your Photographs
Alexandra
Alexandra

Posted on

Passion Lens: Discover the Passion Hidden in Your Photographs

DEV Weekend Challenge: Passion Edition Submission

Passion Lens: Discover the Passion Hidden in Your Photographs

This is a submission for Weekend Challenge: Passion Edition.

What I Built

When the challenge has a theme about our passions, mine was clear. I love photography. I picked up a camera more than 10 years ago, and I guess I've done my part to reinforce the stereotype that every frontend developer is secretly a photographer. To me, photography is a story, a feeling, a moment, a landscape. That's why i love landscapes and street photography.

The project's idea is simple: what the pictures you take say about you? What if you have a personal photography expert that let you capture the essence and learn something new about yourself?

You just upload a photo, share where it was taken and why it matters to you, and choose your storytelling voice: documentary, cinematic, poetic, or travel journal.

Passion Lens uses Google Gemini to analyze the visible composition alongside the photographerโ€™s own context. It creates:

  • A title and three moods
  • A personal memory
  • Visual observations grounded in the photograph
  • Composition notes
  • A reflection on what the photograph may reveal about the photographerโ€™s passions

The experience is designed to feel reflective rather than transactional.

Once the memory is ready, the user can listen to it through ElevenLabs narration or download the complete memory as a PDF.

Passion Lens begins with a photograph, but its real subject is the person behind the camera.

Demo

๐Ÿ”— Try Passion Lens

Create your storytelling about your photos

The demo flow:

  1. Upload a photograph.
  2. Add a location and a few personal words.
  3. Select a storytelling style.
  4. Generate the memory.
  5. Explore Geminiโ€™s story, moods, visual observations, and passion reflection.
  6. Listen to the narrated memory.
  7. Download the finished memory as a PDF.

Code

๐Ÿ’ป View the source code on GitHub

How I Built It

Passion Lens uses React, TypeScript, Vite, and Framer Motion on the frontend, with an Express server handling the AI integrations.

Google Gemini

The uploaded photograph and the photographerโ€™s written context are sent as a multimodal request to Gemini.

Gemini returns a structured JSON response containing:

  • title
  • moods
  • visualDetails
  • story
  • photographerInsight
  • passionProfile

Using a response schema made the output predictable enough to drive the designed memory interface directly.

The prompt explicitly tells Gemini not to invent events, identities, relationships, professions, destinations, or emotions that cannot be observed. If a person appears in the photograph, the model describes only visible details. I tried many prompts, but it still vastly makes up things sometimes. :/

ElevenLabs

ElevenLabs turns the generated story into spoken narration.

The photograph slowly brightens and moves while narration is playing, making the memory feel alive without distracting from the story.

Memory Experience

The final card asks:

What does this photograph reveal about you?

This is where Passion Lens moves beyond โ€œAI writes a story about my photo.โ€ It begins helping the photographer understand why certain moments attract their attention.

PDF Export

The browser generates a downloadable PDF with jsPDF.

It includes the photograph, title, location, moods, story, Composition Notes, and passion profile. This gives the user something lasting to keep or share after the experience ends.

Technical Stack

  • React
  • TypeScript
  • Vite
  • React Router
  • Framer Motion
  • Express
  • Google Gemini API
  • ElevenLabs API
  • jsPDF
  • Multer

Challenges and Lessons

A memory should feel personal and evocative, but an image model should not quietly invent facts about someoneโ€™s life. Separating user-provided emotional context from model-observed visual details helped preserve that boundary.

Structured Gemini output was another important decision. Instead of parsing free-form prose, the application receives a defined object that can be safely mapped into different parts of the interface.

Prize Categories

Best Use of Google AI

Gemini is the central intelligence behind Passion Lens. It combines multimodal image understanding with the photographerโ€™s context to produce grounded visual observations, a personal narrative, Composition Notes, and a carefully framed passion profile.

Best Use of ElevenLabs

ElevenLabs transforms each generated story into an intimate narrated memory. Voice makes the result feel less like generated text and more like revisiting a moment.

Whatโ€™s Next

The current MVP analyzes one photograph at a time.

The next step is persistence: allowing users to build a private collection of memories. Passion Lens could then identify recurring subjects, environments, colors, emotions, and composition choices across the collection.

That is the larger promise of the project:

Your photographs do not only show where you have been. Together, they may reveal what you keep searching for.

Top comments (4)

Collapse
 
rgerjeki profile image
Reese Gerjekian

Super cool project Alexandra! Got a nice memory save for myself now, ty ๐Ÿ˜Š

Collapse
 
ale3oula profile image
Alexandra

Thank you, hope you enjoyed it ๐Ÿ˜Š

Collapse
 
technogamerz profile image
๐‘ป๐’‰๐’† ๐‘ณ๐’‚๐’›๐’š ๐‘ฎ๐’Š๐’“๐’

Oh!! what a project ๐Ÿ˜ฎ really i like it!โค๏ธ

Collapse
 
ale3oula profile image
Alexandra

Thank youuuuu โค๏ธ