Admin – ihaveanidea

User

Email: mark@mark-christensen.com

ID: 6403f2eb-18b4-45ee-b9af-eee2e0e93425

Created:

← Back to Account

Password

Set. This account can log in.

API Keys

App ID Created Actions
android:2dd0d69cf5d5178e
desktop:38ded643-95fb-489f-969c-7871359f7c40

Definitions

User-defined idea types and task types (0.11.0). Read-only here — created and edited on the clients' Types page, synced via definition.* CRDT ops.

Kind Name Built-in Data
idea_status Dream yes {"builtin_slug":"dream","schema":1}
idea_status In Progress yes {"builtin_slug":"in-progress","schema":1}
idea_status Stable yes {"builtin_slug":"stable","schema":1}
idea_status Finished yes {"builtin_slug":"finished","schema":1}
idea_status Need $ — {"schema":1.0}
idea_status Paused — {"schema":1.0}
idea_type Software yes {"blocks":["concept","note","attachment","plan","task_list","release","asset"],"builtin_slug":"software","schema":1,"task_type_ids":["818ca193-82c3-5d3d-8976-2b0b8359226f","a57ca2a4-d396-587e-b1bb-1615090d015a","83776309-6f31-52b1-89ab-fce3a072eef9","7a52c188-6cda-58d0-9872-9aafb05b81ce","e78f0a74-c1b4-5a2d-aa37-0978495fb462"]}
idea_type App — {"blocks":["concept","note","attachment","plan","task_list","release","asset"],"schema":1,"task_type_ids":["818ca193-82c3-5d3d-8976-2b0b8359226f","a57ca2a4-d396-587e-b1bb-1615090d015a","83776309-6f31-52b1-89ab-fce3a072eef9","7a52c188-6cda-58d0-9872-9aafb05b81ce","e78f0a74-c1b4-5a2d-aa37-0978495fb462"]}
idea_type Service — {"blocks":["concept","note","attachment","plan","task_list","release","asset"],"schema":1,"task_type_ids":["818ca193-82c3-5d3d-8976-2b0b8359226f","a57ca2a4-d396-587e-b1bb-1615090d015a","83776309-6f31-52b1-89ab-fce3a072eef9","7a52c188-6cda-58d0-9872-9aafb05b81ce","e78f0a74-c1b4-5a2d-aa37-0978495fb462"]}
idea_type Site — {"blocks":["concept","note","attachment","plan","task_list","release","asset"],"schema":1,"task_type_ids":["818ca193-82c3-5d3d-8976-2b0b8359226f","a57ca2a4-d396-587e-b1bb-1615090d015a","83776309-6f31-52b1-89ab-fce3a072eef9","7a52c188-6cda-58d0-9872-9aafb05b81ce","e78f0a74-c1b4-5a2d-aa37-0978495fb462"]}
idea_type Hardware — {"blocks":["concept","note","attachment","plan","task_list","release"],"schema":1.0,"task_type_ids":["818ca193-82c3-5d3d-8976-2b0b8359226f","83776309-6f31-52b1-89ab-fce3a072eef9","7a52c188-6cda-58d0-9872-9aafb05b81ce","e78f0a74-c1b4-5a2d-aa37-0978495fb462"]}
idea_type House — {"blocks":["concept","note","attachment","plan","task_list","release","asset"],"schema":1.0}
idea_type Game — {"blocks":["concept","note","attachment","plan","task_list","release","asset"],"schema":1.0}
task_type Bug yes {"builtin_slug":"bug","schema":1}
task_type UX yes {"builtin_slug":"ux","schema":1}
task_type Feature yes {"builtin_slug":"feature","schema":1}
task_type Chore yes {"builtin_slug":"chore","schema":1}
task_type Docs yes {"builtin_slug":"docs","schema":1}

CRDT Messages

Scans all CRDT log rows for this user. Rows whose operation payload matches an earlier row (same normalized JSON) are removed; the lowest data_version for each payload is kept. This cannot be undone. Removing tail rows can lower server latest_version after the next client sync.

Version Type Inserted Operation
796 idea.update %{"archived" => false, "category" => "app", "id" => "2d97d724-fd45-4168-8c36-f8db6c05cbd0", "idea_type_id" => "29ddb6d5-aa74-5ebb-8bf1-ee684556a9ca", "inserted_at" => "2026-08-25T23:21:27Z", "name" => "I have an idea", "pitch" => "Track all ideas through all stages of completion", "type" => "idea.update", "updated_at" => "2026-09-08T23:44:56Z"}
795 element.update %{"body" => "{\"type\":\"doc\",\"content\":[{\"type\":\"paragraph\",\"content\":[{\"type\":\"text\",\"text\":\"First \\\"finished\\\" version\"}]},{\"type\":\"paragraph\"}]}", "data" => %{"released" => true}, "element_type" => "release", "id" => "c7436b58-7978-4418-a0e2-354028273d51", "idea_id" => "2d97d724-fd45-4168-8c36-f8db6c05cbd0", "inserted_at" => "2026-08-27T00:22:15Z", "position" => 0, "title" => "1.0", "type" => "element.update", "updated_at" => "2026-09-08T23:44:55Z"}
794 idea.update %{"archived" => false, "blocks" => nil, "category" => "Site", "id" => "81f45569-1628-48f4-97a2-2d461e37b8fc", "idea_type_id" => "610d89a5-24cb-5043-a01f-02076dd4399e", "inserted_at" => "2026-08-27T08:41:15Z", "name" => "Gallery", "pitch" => "Share photos and videos along with captions and other metadata", "type" => "idea.update", "updated_at" => "2026-09-08T23:44:28Z"}
793 asset.update %{"agents_excerpt" => nil, "agents_source_file" => nil, "git_default_branch" => "master", "git_remote_url" => "git@144.76.119.114:/home/git/photo_gallery_edit.git", "id" => "73734ae7-eaf8-4718-9024-e5aca5a68c0a", "idea_id" => "81f45569-1628-48f4-97a2-2d461e37b8fc", "inserted_at" => "2026-08-31T23:26:42Z", "label" => "Original version", "last_commit_at" => "2026-09-08 02:59:10 +0200", "last_commit_author" => "anonymous <anonymous@anonymo.us>", "last_commit_message" => "Fix for processing video UX\n", "last_commit_sha" => "798ca8ad78f599942a74a7af34487ccbfb41f658", "last_scanned_at" => "2026-09-08T23:44:28Z", "local_path" => "C:\\Users\\anonymous\\projects\\photo_gallery_edit", "readme_excerpt" => "# Photo Gallery Edit (PGE)\n\nA small single-user tool for curating photo galleries and **publishing** them as\nself-contained static HTML pages at a shareable URL, optionally password-protected.\n\n- Upload images (auto EXIF-orient + thumbnails), give each a title and description,\n reorder by drag-and-drop.\n- Publish → paginated static pages where each image is embedded as a `data:` URI\n (the page renders with zero extra requests); full-size originals load in the\n background for the click-to-enlarge lightbox.\n- Per-gallery viewer passwords: any number, added/removed independently. A correct\n password grants 48 hours of access; removing a password ends the sessions that\n used it.\n- Multi-user: each account owns its own galleries. Admins get a console\n (`/admin`) to invite users by email, see per-user stats, set a user's password,\n toggle admin, and deactivate accounts, plus a log of every password-reset\n request and a **Backup** tab to download / restore the SQLite database.\n\n**Stack:** FastAPI + SQLite (backend, `backend/`) · React + Vite + TypeScript\n(editor SPA, `frontend/`). One process serves the API (`/api`), the editor (`/`),\nand published galleries (`/g/<slug>`). The pre-rewrite codebase is kept under\n`legacy/` (git tag `v0-legacy`).\n\n## Run it (Docker)\n\n```sh\ncp .env.example .env\n# Fill in SECRET_KEY and ADMIN_EMAIL, then generate ADMIN_PASSWORD_HASH:\n( cd backend && uv run python -m app.cli hash-password ) # paste the hash into .env\ndocker compose -f docker/compose.yaml up --build\n```\n\nOpen http://localhost:9200 and log in with the credentials from `.env`\n(set `BASE_URL=http://localhost:9200` in `.env` so generated links match).\nData lives in the `pge_data` Docker volume.\n\n`ADMIN_EMAIL` / `ADMIN_PASSWORD_HASH` seed the **first** user (an admin) on the\ninitial database migration. After that the `users` table is authoritative and\nthose variables are ignored — manage accounts from the admin console or the CLI.\n\n## User management\n\n- **Invite a user:** ad", "repo_name" => "photo_gallery_edit", "source_device_app_id" => "desktop:38ded643-95fb-489f-969c-7871359f7c40", "type" => "asset.update", "updated_at" => "2026-09-08T23:44:28Z"}
792 idea.update %{"archived" => false, "category" => "Site", "id" => "81f45569-1628-48f4-97a2-2d461e37b8fc", "idea_type_id" => "610d89a5-24cb-5043-a01f-02076dd4399e", "inserted_at" => "2026-08-27T08:41:15Z", "name" => "Gallery", "pitch" => "Share photos and videos along with captions and other metadata", "type" => "idea.update", "updated_at" => "2026-09-08T23:43:55Z"}
791 element.update %{"body" => "{\"type\":\"doc\",\"content\":[{\"type\":\"paragraph\",\"content\":[{\"type\":\"text\",\"text\":\"Multi-user support and admin controls \"}]}]}", "data" => %{"released" => true}, "element_type" => "release", "id" => "a9bb68fd-629c-4832-9030-a99011bd9347", "idea_id" => "81f45569-1628-48f4-97a2-2d461e37b8fc", "inserted_at" => "2026-09-02T09:52:59Z", "position" => 0, "title" => "3.0", "type" => "element.update", "updated_at" => "2026-09-08T23:43:55Z"}
790 idea.update %{"archived" => false, "category" => "Site", "id" => "81f45569-1628-48f4-97a2-2d461e37b8fc", "idea_type_id" => "610d89a5-24cb-5043-a01f-02076dd4399e", "inserted_at" => "2026-08-27T08:41:15Z", "name" => "Gallery", "pitch" => "Share photos and videos along with captions and other metadata", "type" => "idea.update", "updated_at" => "2026-09-08T23:43:54Z"}
789 element.update %{"body" => "{\"type\":\"doc\",\"content\":[{\"type\":\"paragraph\",\"content\":[{\"type\":\"text\",\"text\":\"Modernized version.\u00A0 New stack, same mission.\"}]}]}", "data" => %{"released" => true}, "element_type" => "release", "id" => "5ce7abfa-1081-4090-b4ca-1ddf0066dd5b", "idea_id" => "81f45569-1628-48f4-97a2-2d461e37b8fc", "inserted_at" => "2026-09-01T00:05:49Z", "position" => 2, "title" => "2.0", "type" => "element.update", "updated_at" => "2026-09-08T23:43:54Z"}
788 idea.update %{"archived" => false, "category" => "Site", "id" => "81f45569-1628-48f4-97a2-2d461e37b8fc", "idea_type_id" => "610d89a5-24cb-5043-a01f-02076dd4399e", "inserted_at" => "2026-08-27T08:41:15Z", "name" => "Gallery", "pitch" => "Share photos and videos along with captions and other metadata", "type" => "idea.update", "updated_at" => "2026-09-08T23:43:50Z"}
787 element.update %{"body" => "{\"type\":\"doc\",\"content\":[{\"type\":\"paragraph\",\"content\":[{\"type\":\"text\",\"text\":\"Original build of the service\"}]}]}", "data" => %{"released" => true}, "element_type" => "release", "id" => "121405cb-7165-4d6a-a740-fc80b3fe1899", "idea_id" => "81f45569-1628-48f4-97a2-2d461e37b8fc", "inserted_at" => "2026-09-01T00:05:49Z", "position" => 1, "title" => "1.0", "type" => "element.update", "updated_at" => "2026-09-08T23:43:50Z"}
786 idea.update %{"archived" => false, "category" => "Site", "id" => "81f45569-1628-48f4-97a2-2d461e37b8fc", "idea_type_id" => "610d89a5-24cb-5043-a01f-02076dd4399e", "inserted_at" => "2026-08-27T08:41:15Z", "name" => "Gallery", "pitch" => "Share photos and videos along with captions and other metadata", "type" => "idea.update", "updated_at" => "2026-09-08T23:43:46Z"}
785 element.update %{"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}, "element_type" => "plan", "id" => "eee56299-6a20-4d3e-b4e3-2b00241425d2", "idea_id" => "81f45569-1628-48f4-97a2-2d461e37b8fc", "inserted_at" => "2026-09-02T22:53:43Z", "position" => 14, "title" => "Media improvements", "type" => "element.update", "updated_at" => "2026-09-08T23:43:46Z"}
784 idea.update %{"archived" => false, "category" => "Site", "id" => "81f45569-1628-48f4-97a2-2d461e37b8fc", "idea_type_id" => "610d89a5-24cb-5043-a01f-02076dd4399e", "inserted_at" => "2026-08-27T08:41:15Z", "name" => "Gallery", "pitch" => "Share photos and videos along with captions and other metadata", "type" => "idea.update", "updated_at" => "2026-09-08T23:43:41Z"}
783 element.update %{"body" => "{\"type\":\"doc\",\"content\":[{\"type\":\"paragraph\",\"content\":[{\"type\":\"text\",\"text\":\"Videos\"}]}]}", "data" => %{"released" => true}, "element_type" => "release", "id" => "7b34dc1c-c496-4c75-8f0f-bf338cd9254f", "idea_id" => "81f45569-1628-48f4-97a2-2d461e37b8fc", "inserted_at" => "2026-09-02T22:53:43Z", "position" => 15, "title" => "4.0", "type" => "element.update", "updated_at" => "2026-09-08T23:43:41Z"}
782 idea.update %{"archived" => false, "category" => "Site", "id" => "81f45569-1628-48f4-97a2-2d461e37b8fc", "idea_type_id" => "610d89a5-24cb-5043-a01f-02076dd4399e", "inserted_at" => "2026-08-27T08:41:15Z", "name" => "Gallery", "pitch" => "Share photos and videos along with captions and other metadata", "type" => "idea.update", "updated_at" => "2026-09-08T23:43:37Z"}
781 element.update %{"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}, "element_type" => "plan", "id" => "a42e1386-98af-4a98-b1c1-004fd6cb5201", "idea_id" => "81f45569-1628-48f4-97a2-2d461e37b8fc", "inserted_at" => "2026-09-02T09:53:52Z", "position" => 0, "title" => "Multi-user support", "type" => "element.update", "updated_at" => "2026-09-08T23:43:37Z"}
780 idea.update %{"archived" => false, "category" => "Site", "id" => "81f45569-1628-48f4-97a2-2d461e37b8fc", "idea_type_id" => "610d89a5-24cb-5043-a01f-02076dd4399e", "inserted_at" => "2026-08-27T08:41:15Z", "name" => "Gallery", "pitch" => "Share photos and videos along with captions and other metadata", "type" => "idea.update", "updated_at" => "2026-09-08T23:43:35Z"}
779 element.update %{"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}, "element_type" => "plan", "id" => "547d6afe-3ebd-4f2e-bb8f-1f647b0f5f6c", "idea_id" => "81f45569-1628-48f4-97a2-2d461e37b8fc", "inserted_at" => "2026-09-01T00:05:49Z", "position" => 4, "title" => "Rebuild", "type" => "element.update", "updated_at" => "2026-09-08T23:43:35Z"}
778 idea.update %{"archived" => false, "category" => "Site", "id" => "81f45569-1628-48f4-97a2-2d461e37b8fc", "idea_type_id" => "610d89a5-24cb-5043-a01f-02076dd4399e", "inserted_at" => "2026-08-27T08:41:15Z", "name" => "Gallery", "pitch" => "Share photos and videos along with captions and other metadata", "type" => "idea.update", "updated_at" => "2026-09-08T23:43:34Z"}
777 element.update %{"data" => %{"complete" => false, "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}, "element_type" => "plan", "id" => "547d6afe-3ebd-4f2e-bb8f-1f647b0f5f6c", "idea_id" => "81f45569-1628-48f4-97a2-2d461e37b8fc", "inserted_at" => "2026-09-01T00:05:49Z", "position" => 4, "title" => "Rebuild", "type" => "element.update", "updated_at" => "2026-09-08T23:43:34Z"}
Previous Page 16 of 55 (1096 total) Next