Something went wrong. Try again.
Monorepo for Aesthetic.Computer aesthetic.computer
Something went wrong. Try again.
Markdown
Oven Local Development Setup #
Quick Start #
# Start the oven service
ac-oven
This will:
- Navigate to ~/aesthetic-computer/oven
- Clean up any stuck processes
- Kill port 3002
- Start the oven server with auto-reload on https://localhost:3002
Architecture #
Production Flow #
- track-media.mjs (Netlify) → Creates tape record, POSTs to
https://oven.aesthetic.computer/bake - oven → Downloads ZIP, processes video, uploads to Spaces
- oven → Calls webhook
POST /api/tape-mp4-completeon Netlify - tape-mp4-complete.mjs (Netlify) → Downloads MP4/thumbnail, syncs to ATProto
Local Dev Flow #
- track-media.mjs (Netlify dev) → Creates tape record, POSTs to
https://localhost:3002/bake - oven (local) → Downloads ZIP, processes video, uploads to Spaces
- oven (local) → Calls webhook
POST localhost:8888/api/tape-mp4-complete - tape-mp4-complete.mjs (Netlify dev) → Downloads MP4/thumbnail, syncs to ATProto
Key URLs #
- Oven dashboard: https://localhost:3002/
- Health check: https://localhost:3002/health
- Status API: https://localhost:3002/status
- Bake endpoint: https://localhost:3002/bake (POST)
- WebSocket: wss://localhost:3002/ws
Environment Detection #
The oven service is automatically selected based on environment:
const isDev = process.env.CONTEXT === 'dev' || process.env.NODE_ENV === 'development';
const ovenUrl = isDev ? 'https://localhost:3002' : 'https://oven.aesthetic.computer';
Testing Locally #
-
Start the oven service:
ac-oven -
Start Netlify dev (in another terminal):
ac-site -
Upload a tape through the site - it will automatically use the local oven
-
Monitor the oven dashboard at https://localhost:3002/ to see live processing status
Emacs Tab Configuration #
Add to your Emacs aesthetic-backend configuration:
;; Example tab configuration for oven
(add-to-list 'aesthetic-tabs
'("oven" . (lambda ()
(aesthetic-run-in-tab "oven" "ac-oven"))))
This allows you to switch to the oven tab using your Emacs aesthetic interface.
Files Modified #
/oven/*- New oven servicesystem/netlify/functions/track-media.mjs- Updated to call oven instead of inline processingsystem/netlify/functions/tape-mp4-complete.mjs- Updated webhook to handle oven callbacks.devcontainer/config.fish- Addedac-ovenfunction
Code-Based File Naming #
Both guest and user tapes now use code for file identification:
- Guest ZIP:
art-aesthetic-computer/tapes/{code}.zip - User ZIP:
user-aesthetic-computer/tapes/{code}.zip(future) - Output MP4:
at-blobs-aesthetic-computer/tapes/{code}.mp4 - Output thumbnail:
at-blobs-aesthetic-computer/tapes/{code}-thumb.jpg
This provides consistency across the database and storage layer.
Next Steps #
- Test full local flow (upload → oven → webhook → atproto)
- Add oven tab to Emacs configuration
- Deploy oven to DigitalOcean droplet
- Set up production environment variables
- Configure Caddy for HTTPS on oven.aesthetic.computer