A photo frame web app built for Val Town.
The app uses Hono for the HTTP server, JSX for the views, and a plain
browser JavaScript file for client-side interactivity.
The current implementation supports:
- selecting multiple photos from the local device
- previewing them in a setup screen
- naming the current collection
- removing photos from the collection
- adding a caption to each photo
- saving collection data and image files locally in the browser
- starting a fullscreen-style slideshow player
- showing captions over presented photos
- auto-hiding slideshow controls when the mouse is idle
- changing slideshow settings like interval, fit mode, shuffle, loop, and
crossfade
This project is in active MVP development.
What works now:
- Deno/Hono server entrypoint
- local upload flow
- local collection persistence with
IndexedDB
- lightweight settings persistence with
localStorage
- slideshow playback with next, previous, and exit controls
- photo captions
- optional crossfade transitions
What is planned next:
- Val Town blob storage integration
- remote collection metadata persistence
- image compression/resizing on upload
- support for multiple collections
- Deno
- Hono
- Hono JSX for the server-rendered page shell
- Plain browser JavaScript for client-side behavior
- CSS served directly by Hono
- IndexedDB for local photo storage
- localStorage for simple UI preferences
views/
index.html
static/
app.js
styles.css
deno.json
main.tsx
README.md
The app intentionally does not store image data in localStorage. That storage
is too small for real photo usage.
Instead:
- image files are stored in
IndexedDB
- collection metadata is stored in
IndexedDB
- slideshow preferences are stored in
localStorage
The remote Val Town blob persistence layer has not been wired yet.