From 42f0caf23f866bcee3566ebf4bf19967b125fe2d Mon Sep 17 00:00:00 2001 From: Niels Mokkenstorm Date: Sun, 19 Jul 2026 15:22:03 +0200 Subject: [PATCH] docs(readme): refresh feature list, drop predecessor reference, document sdl authoring --- README.md | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 3296cfd..caf597e 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,7 @@ A Discogs-like, atproto-native record collection app, written in Gleam. Your crate (the vinyl kind) is stored as records (the atproto kind) in your own -PDS. Gleam reincarnation of the `crate` design: same lexicons -(`dev.mokkenstorm.crate.*`), same PDS-as-storage idea, different stack. +PDS, under the `dev.mokkenstorm.crate.*` lexicons. Live in beta at [crate.mokkenstorm.dev](https://crate.mokkenstorm.dev). @@ -13,11 +12,18 @@ Live in beta at [crate.mokkenstorm.dev](https://crate.mokkenstorm.dev). at rest. - Your crate is an append-only event log, folded into current crate, wishlist, and history. -- Discogs seed search, account connection, and collection import. -- Barcode scan-to-import (Chromium's `BarcodeDetector` only, for now). +- Discogs seed search, account connection, and collection/wantlist import. +- Barcode scan-to-import in any browser: the native `BarcodeDetector` where + it exists, a bundled ZXing WASM ponyfill elsewhere; photo capture mode and + a did-you-mean review flow for misses. - Cover art stored as blobs in your repo, not hotlinked. -- `via @handle` attribution chip on entries adopted from someone else's - catalog release. +- A shared, browsable catalog: one-tap adoption with `via @handle` + attribution, public crate pages with taste overlap, crate-native follows, + and a friends feed grouped by activity. +- A collaborative edit loop: amending your own pressing supersedes it, + amending a foreign one files an edit proposal into the owner's inbox. +- Catalog entities (artists, genres) minted from Discogs data, with + MusicBrainz ids as the cross-app bridge. ## Layout @@ -25,6 +31,7 @@ Gleam multi-target monorepo. `server`/`web` depend on `shared` by path; the generic atproto plumbing comes from Hex ([gleam-atproto](https://tangled.org/@mokkenstorm.dev/gleam-atproto): [`atproto_client`](https://hex.pm/packages/atproto_client) + +[`atproto_sdl`](https://hex.pm/packages/atproto_sdl) + [`atproto_codegen`](https://hex.pm/packages/atproto_codegen)). | Package | Target | What it is | @@ -33,14 +40,15 @@ generic atproto plumbing comes from Hex | `server` | erlang | Wisp BFF: routes, OAuth, sessions, Discogs client. | | `web` | javascript | Lustre SPA, talks to the BFF (+ the public Bluesky AppView directly for handle search). | -Lexicons live under `lexicons/`. `shared/src/at_record/gen/` is -**generated and gitignored**: `make gen` runs `atproto_codegen` over -`lexicons/`. Run `make gen` (or `make test`, which depends on it) before -building a fresh checkout. +Lexicons are authored in Lexicon SDL (`lexicons/**/*.sdl`); `make gen` +converts them to lexicon JSON and generates codecs plus a typed XRPC client +into `shared/src/at_record/gen/`, which is **generated and gitignored**. Run +`make gen` (or `make test`, which depends on it) before building a fresh +checkout. ## Run it locally -Needs `gleam`, `erlang`, `node`, `docker`, `make`. +Needs `gleam`, `erlang`, `node`, `bun`, `docker`, `make`. ```sh make dev # watch loop: Postgres in docker, rebuilds server/web on change -- 2.51.2