NanoRewind 4K cover

NanoRewind 4K

Released: Dec 2025

Description

NanoRewind restores old, scratched, and blurry photographs to 4K using a Google Gemini image model. Beyond a straight repair, it can render a result in six photographic developer styles, from Silver Gelatin black and white to Kodachrome 64, with optional Chiaroscuro and Matte Emulsion treatments on top. A drag-to-reveal slider sits over the output so you can check the restoration against the original before downloading it. Every free account gets three restorations a day, counted server-side.

Key Responsibilities

Built the React 19 and Vite frontend, including the drag-to-reveal comparison slider and the developer-process picker.


Wrote the Vercel serverless API under /api in TypeScript, keeping the Gemini calls and all database access off the client.


Designed the Postgres schema in Supabase with row-level security and an RPC that deducts a credit atomically, so a user cannot spend the same credit twice.


Moved authentication from the browser to the backend, removing the Supabase SDK and both of its keys from the frontend bundle.


Prototyped and engineered prompts in Google AI Studio to fine-tune Gemini image restoration outputs across six photographic developer processes and atmospheric modifiers.


Leveraged Claude Code and AI-assisted tooling to scaffold architecture, generate Postgres RPC logic, and streamline full-stack iteration.


Configured a GitHub Actions workflow that pings Supabase hourly to stop the free-tier database from pausing.

Technology Used

icon_react.svg

React

icon_typescript.svg

TypeScript

Vite

Vercel

icon_supabase.svg

Supabase

icon_postgresql.svg

PostgreSQL

icon_gemini.svg

Google Gemini

Google AI Studio

Claude Code

Features

Full 4K Photo Restoration

Upload a damaged photo and it comes back repaired at full 4K. Scratches, blur, and age damage are handled in one pass.

Six Developer Processes

The same restoration can be rendered as Standard, Silver Gelatin black and white, Albumen sepia, Cyanotype, Lumiere Autochrome, or Kodachrome 64. Chiaroscuro deepens the shadows and Matte Emulsion softens the highlights, and both can be layered on any process.

Drag-to-Reveal Before & After

A slider sits over the result so you can drag across the image and see exactly what changed. The landing page runs the same comparison on a demo pair automatically.

Server-Side Credit Ledger

Each account gets three restorations a day. The count lives in Postgres and is deducted through a Supabase RPC, so the browser cannot alter its own balance.

Zero-Secret Frontend

The browser bundle holds no API keys. Gemini and database access run in Vercel serverless functions under /api, same-origin with the frontend, and the client only ever talks to those.

Screenshots

Additional Information

Built solo using Claude Code and AI-assisted workflows alongside Google AI Studio across 48 commits from December 2025 to July 2026, accelerating iteration on both code and generative prompts.


It started with Supabase running in the browser. I pulled the SDK and both keys out of the frontend and rewrote auth to run server-side, so the client now holds no secrets at all.


The developer processes came out of wanting more than a clean repair. A restored photo that looks like a Cyanotype or a Kodachrome slide is more interesting than one that just looks new.


A saved archive was designed and never built: a Supabase Storage bucket scoped per user, list and delete endpoints, and a grid view for reloading past restorations. The schema and endpoints are specified in the TO-DO but the work stopped before them.


The free tier is capped at three restorations a day because Gemini image calls cost money and the app has no revenue.

Get in Touch:

Copyright2025 - 2026 | All rights reserved