Gallery
Site (legacy category)
Idea type:
610d89a5-24cb-5043-a01f-02076dd4399e
81f45569-1628-48f4-97a2-2d461e37b8fc
· Owner: mark@mark-christensen.com
· Created
· Updated
Tags: File management Human Amplifiers service Media
Elements
Optional content — concept, plan, task list, release notes, freeform notes, attachments. Add or edit any of these in any order.
| Type | Title | Pos | Content | Created | Updated | |
|---|---|---|---|---|---|---|
| concept | 0 |
165e0e5e-e13b-4b06-bf4a-1ab248ded797
Body (498 bytes){"type":"doc","content":[{"type":"paragraph","content":[{"type":"text","text":"This already exists in an earlier form as Photo Gallery. That was intended to be a very efficient, prerendered site and didnt focus much on the creation side. This made it hard to use and so I lost interest. This updated version should achieve both prerendering for easy viewing as well as good UX for adding content. It also needs to improve upon the video delivery side because the old version was really laggy."}]}]}
|
||||
| task_list | Deploy new version Chore | 0 |
fe6ce6d7-1a88-4429-9723-5ffefe83ae03
Data{"done":true,"release_id":"5ce7abfa-1081-4090-b4ca-1ddf0066dd5b","task_type_id":"7a52c188-6cda-58d0-9872-9aafb05b81ce"}
|
|||
| task_list | Test new version Chore | 0 |
3a70d33a-9101-478e-befc-8c98fa61a5f6
Data{"done":true,"release_id":"5ce7abfa-1081-4090-b4ca-1ddf0066dd5b","task_type_id":"7a52c188-6cda-58d0-9872-9aafb05b81ce"}
|
|||
| task_list | Add proper design system Chore | 0 |
ace62a78-a4da-4e6d-a98f-0cee8bcea786
Data{"done":true,"release_id":"5ce7abfa-1081-4090-b4ca-1ddf0066dd5b","task_type_id":"7a52c188-6cda-58d0-9872-9aafb05b81ce"}
|
|||
| task_list | Improve UX Chore | 0 |
53f69e85-7f6d-4265-9bb1-22740be9dbda
Data{"done":true,"release_id":"5ce7abfa-1081-4090-b4ca-1ddf0066dd5b","task_type_id":"7a52c188-6cda-58d0-9872-9aafb05b81ce"}
|
|||
| task_list | Can't drag to reorder on mobile Bug | 0 |
97a85dc8-8c38-451d-8cc7-edc3a5fe0167
Data{"done":true,"release_id":"a9bb68fd-629c-4832-9030-a99011bd9347","task_type_id":"818ca193-82c3-5d3d-8976-2b0b8359226f"}
|
|||
| release | 3.0 | 0 |
a9bb68fd-629c-4832-9030-a99011bd9347
Body (123 bytes){"type":"doc","content":[{"type":"paragraph","content":[{"type":"text","text":"Multi-user support and admin controls "}]}]}
Data{"released":true}
|
|||
| plan | Multi-user support | 0 |
a42e1386-98af-4a98-b1c1-004fd6cb5201
Data{"complete":true,"items":[{"children":[],"done":true,"id":"ef7bb1cf-8bd5-4376-82f2-755d62daeb23","ref":{"element_id":"a9bb68fd-629c-4832-9030-a99011bd9347","kind":"release"},"text":"3.0"}],"schema":2.0}
|
|||
| task_list | Multi-user support Feature | 0 |
aaaeb095-0590-4c3c-a40c-71d9ddcb0226
Data{"done":true,"release_id":"a9bb68fd-629c-4832-9030-a99011bd9347","task_type_id":"83776309-6f31-52b1-89ab-fce3a072eef9"}
|
|||
| task_list | Admin console Feature | 0 |
8240b1b8-7756-43d8-b48b-26046e0683c2
Data{"done":true,"release_id":"a9bb68fd-629c-4832-9030-a99011bd9347","task_type_id":"83776309-6f31-52b1-89ab-fce3a072eef9"}
|
|||
| task_list | Unbreak galleries Chore | 0 |
c16b85a2-9bf9-4d25-b882-fa6deb33f3ba
Data{"done":true,"task_type_id":"7a52c188-6cda-58d0-9872-9aafb05b81ce"}
|
|||
| task_list | Add backup/restore Feature | 0 |
1b131f76-ef0d-4f90-8715-0331fa505aca
Data{"done":true,"release_id":"a9bb68fd-629c-4832-9030-a99011bd9347","task_type_id":"83776309-6f31-52b1-89ab-fce3a072eef9"}
|
|||
| release | 1.0 | 1 |
121405cb-7165-4d6a-a740-fc80b3fe1899
Body (114 bytes){"type":"doc","content":[{"type":"paragraph","content":[{"type":"text","text":"Original build of the service"}]}]}
Data{"released":true}
|
|||
| release | 2.0 | 2 |
5ce7abfa-1081-4090-b4ca-1ddf0066dd5b
Body (131 bytes){"type":"doc","content":[{"type":"paragraph","content":[{"type":"text","text":"Modernized version. New stack, same mission."}]}]}
Data{"released":true}
|
|||
| plan | Rebuild | 4 |
547d6afe-3ebd-4f2e-bb8f-1f647b0f5f6c
Data{"complete":true,"items":[{"children":[{"children":[],"done":true,"id":"071ebe98-cd75-4045-bb83-41f6d7e448c9","ref":{"element_id":"a8ec5a55-22f8-40f3-b58b-5d77c969df0c","kind":"note"},"text":"Modernization notes"}],"done":true,"id":"55bca9f8-25de-40fa-bb65-5f8b00f4fb61","ref":{"element_id":"5ce7abfa-1081-4090-b4ca-1ddf0066dd5b","kind":"release"},"text":"2.0"},{"children":[],"done":true,"id":"dbb17870-8a91-4215-9710-6e1591f40a42","ref":{"element_id":"121405cb-7165-4d6a-a740-fc80b3fe1899","kind":"release"},"text":"1.0"}],"schema":2.0}
|
|||
| note | Modernization notes | 4 |
a8ec5a55-22f8-40f3-b58b-5d77c969df0c
Body (469 bytes){"type":"doc","content":[{"type":"bulletList","content":[{"type":"listItem","content":[{"type":"paragraph","content":[{"type":"text","text":"Remove CBEN idea"}]}]},{"type":"listItem","content":[{"type":"paragraph","content":[{"type":"text","text":"Make editor use React and live in a single app"}]}]},{"type":"listItem","content":[{"type":"paragraph","content":[{"type":"text","text":"Maintain the HTML export/publish with embedded thumbs"}]}]}]},{"type":"paragraph"}]}
|
|||
| plan | Media improvements | 14 |
eee56299-6a20-4d3e-b4e3-2b00241425d2
Data{"complete":true,"items":[{"children":[],"done":true,"id":"1adac9a3-a7b4-4617-baec-c9732cd17cb0","ref":{"element_id":"7b34dc1c-c496-4c75-8f0f-bf338cd9254f","kind":"release"},"text":"4.0"}],"schema":2.0}
|
|||
| release | 4.0 | 15 |
7b34dc1c-c496-4c75-8f0f-bf338cd9254f
Body (91 bytes){"type":"doc","content":[{"type":"paragraph","content":[{"type":"text","text":"Videos"}]}]}
Data{"released":true}
|
|||
| task_list | Allow users to upload videos (size limited to 50MB by default but configurable) Feature | 16 |
db9fe9a4-fc12-4349-af37-dcc57cbb45b3
Data{"done":true,"release_id":"7b34dc1c-c496-4c75-8f0f-bf338cd9254f","task_type_id":"83776309-6f31-52b1-89ab-fce3a072eef9"}
|
|||
| task_list | Improve Nginx config to support high quality video streaming Feature | 17 |
b3c83ecb-7ece-46fd-a06d-84e7b5ebafee
Data{"done":true,"release_id":"7b34dc1c-c496-4c75-8f0f-bf338cd9254f","task_type_id":"83776309-6f31-52b1-89ab-fce3a072eef9"}
|
|||
| task_list | Add Cloudflare support for video streaming Feature | 18 |
18ec98c8-d22a-459f-bf0b-624fb8ec61cf
Data{"done":true,"release_id":"7b34dc1c-c496-4c75-8f0f-bf338cd9254f","task_type_id":"83776309-6f31-52b1-89ab-fce3a072eef9"}
|
|||
| task_list | Rate limiting to public APIs - login, reset request Feature | 19 |
bce5eb8c-465c-4167-aba8-345046d99de4
Data{"done":true,"release_id":"a9bb68fd-629c-4832-9030-a99011bd9347","task_type_id":"83776309-6f31-52b1-89ab-fce3a072eef9"}
|
Shares
Granted from the desktop or Android app's Share dialog — this view is for oversight/cleanup, not for granting new shares.
| Access | Status | Created | Updated | ||
|---|---|---|---|---|---|
| Not shared with anyone. | |||||
Linked Repos (Assets)
Read-only here — repos are linked and scanned from the desktop app, then synced to this account.
| Repo | Remote | Last Commit | Scanned | Details |
|---|---|---|---|---|
| photo_gallery_edit | git@144.76.119.114:/home/git/photo_gallery_edit.git |
798ca8ad Fix for processing video UX
|
All fieldsID:
73734ae7-eaf8-4718-9024-e5aca5a68c0aLabel: Original version
Local path:
C:\Users\anonymous\projects\photo_gallery_editDefault branch: master
Last commit author: anonymous <anonymous@anonymo.us>
Last commit at:
—
AGENTS source file: —
Source device app id:
desktop:38ded643-95fb-489f-969c-7871359f7c40Created:
Updated:
README excerpt (2005 bytes)# Photo Gallery Edit (PGE) A small single-user tool for curating photo galleries and **publishing** them as self-contained static HTML pages at a shareable URL, optionally password-protected. - Upload images (auto EXIF-orient + thumbnails), give each a title and description, reorder by drag-and-drop. - Publish → paginated static pages where each image is embedded as a `data:` URI (the page renders with zero extra requests); full-size originals load in the background for the click-to-enlarge lightbox. - Per-gallery viewer passwords: any number, added/removed independently. A correct password grants 48 hours of access; removing a password ends the sessions that used it. - Multi-user: each account owns its own galleries. Admins get a console (`/admin`) to invite users by email, see per-user stats, set a user's password, toggle admin, and deactivate accounts, plus a log of every password-reset request and a **Backup** tab to download / restore the SQLite database. **Stack:** FastAPI + SQLite (backend, `backend/`) · React + Vite + TypeScript (editor SPA, `frontend/`). One process serves the API (`/api`), the editor (`/`), and published galleries (`/g/<slug>`). The pre-rewrite codebase is kept under `legacy/` (git tag `v0-legacy`). ## Run it (Docker) ```sh cp .env.example .env # Fill in SECRET_KEY and ADMIN_EMAIL, then generate ADMIN_PASSWORD_HASH: ( cd backend && uv run python -m app.cli hash-password ) # paste the hash into .env docker compose -f docker/compose.yaml up --build ``` Open http://localhost:9200 and log in with the credentials from `.env` (set `BASE_URL=http://localhost:9200` in `.env` so generated links match). Data lives in the `pge_data` Docker volume. `ADMIN_EMAIL` / `ADMIN_PASSWORD_HASH` seed the **first** user (an admin) on the initial database migration. After that the `users` table is authoritative and those variables are ignored — manage accounts from the admin console or the CLI. ## User management - **Invite a user:** ad |