Echoes of Yesterday
A vintage, four-language web archive of Myanmar cultural history, with locale-aware filtering and AI-powered image analysis via Gemini.
4 locales
my · en · zh · de, pre-rendered
AI vision
Gemini structured image analysis
Fallback i18n
graceful per-field translation
[ role ] Sole engineer · T-Htwin Innovation Lab
Project specs
Tech Stack
R&D Focus
Internationalization & Cultural Archiving
Complexity
A vintage, retro-styled web archive that showcases Myanmar’s cultural history through a curated image collection — fully localized into four languages, with locale-aware filtering and an AI tool that analyzes historical photos into structured metadata.
Problem
Cultural archives need to reach a multilingual audience without fragmenting the content, and they often have incomplete metadata. The goal was a single archive that renders consistently across four locales (with graceful fallback when a translation is missing) and a way to enrich historical images with AI-generated descriptions that curators can fold back into the permanent record.
Approach
- › First-class i18n:
next-intlwith a[locale]dynamic segment, middleware locale detection/redirects, sub-locale normalization (en-US→en), andgenerateStaticParamsto pre-render all four locales (my,en,zh,de). - › Hybrid data model: A static historical image archive (
lib/data.ts) stores titles, descriptions, and metadata as multi-language objects, with a centralizedgetLocalizedValueutility that falls back across languages per field. - › Locale-aware filtering: The archive resolves localized strings before matching, so Era/Category filters return consistent results regardless of the active language.
- › AI image analysis: An
ImageAnalyzerposts an image to/api/analyze-image, where server-side Gemini 1.5 Flash returns a structured JSON object that can be used to update the archive. - › Vintage UX: A sepia toggle, comparison sliders, and an image gallery, with reactive content re-rendering on language switch (preserving search params).
Outcome
- › A consistent, pre-rendered experience across four languages with resilient per-field fallback.
- › AI-assisted enrichment that turns raw historical photos into structured, curatable metadata.
- › A cohesive vintage aesthetic with smooth localized transitions.
Stack notes
Next.js 14 App Router with next-intl for routing and translations, Google Gemini SDK for server-side image analysis, Tailwind CSS with custom vintage themes, Framer Motion for transitions, plus react-compare-slider and react-image-gallery. Lightweight client state via React hooks; comments/memories persisted in LocalStorage.