Post one album a day, follow friends, and comment on shared music
Translation pending
AI summary · website and README
SocialGo · HTMLGitHub @EmasXPOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
Post one album a day, follow friends, check in on the AOTDs you've listened to,
comment, and gather in groups. Go + GORM + server-rendered HTML with htmx.
Without credentials, a pasted Spotify link that MusicBrainz doesn't know gives
only its title and cover, and the person posting types the artist. With them,
AOTD also gets the artist and year. It uses the client credentials flow, so
nobody logs in to Spotify.Read the full README ↗Post one album a day, follow friends, check in on the AOTDs you've listened to, comment, and gather in groups. Go + GORM + server-rendered HTML with htmx.
go run ./cmd/aotd -seed # http://localhost:8080 — demo users alice/bob/carol, password "spin the black circle"
go test ./...
| Variable | Default | Notes |
|---|---|---|
AOTD_ADDR | :8080 | Listen address |
AOTD_DATA_DIR | data | SQLite database and avatars |
AOTD_DB_DSN | $AOTD_DATA_DIR/aotd.db | A postgres://… URL switches to Postgres |
AOTD_CACHE_PATH | $AOTD_DATA_DIR/cache.db | bbolt cache file, wiped at every start. One process per file |
AOTD_DEV | 1 | 0 sets Secure on cookies; use it behind HTTPS |
AOTD_MB_CONTACT | project URL | Contact in the MusicBrainz User-Agent (required by their API policy) |
AOTD_SPOTIFY_CLIENT_ID, AOTD_SPOTIFY_CLIENT_SECRET | (none) | Optional Spotify Web API app, see below. Set both or neither |
AOTD_TRUSTED_PROXIES | (none) | Comma-separated proxy IPs/CIDRs, e.g. 10.0.0.5,172.16.0.0/12. Only these may set the client IP via X-Forwarded-For (or X-Real-IP) |
Without credentials, a pasted Spotify link that MusicBrainz doesn't know gives only its title and cover, and the person posting types the artist. With them, AOTD also gets the artist and year. It uses the client credentials flow, so nobody logs in to Spotify.
http://127.0.0.1:8080/callback as redirect URI (required by the form,
unused by AOTD; localhost is not accepted).AOTD_SPOTIFY_CLIENT_ID and AOTD_SPOTIFY_CLIENT_SECRET.The startup log says spotify_api=true when they're set. If the API fails
(bad credentials, lapsed Premium), AOTD falls back to the title and cover.
Europe/Berlin, DST aware). Enforced by a unique
index on (user_id, post_date). Today's post can be edited (note) or deleted,
which frees the day.HttpOnly, SameSite=Lax cookie; only
its SHA-256 is stored. Rotated on login, deleted on logout; a password change
logs out other devices.http.CrossOriginProtection plus SameSite cookies.nosniff, no framing. Avatars are
decoded and re-encoded to 256×256 JPEG (drops EXIF and any payload).AOTD_TRUSTED_PROXIES. Forwarded headers from anyone else are
ignored, and X-Forwarded-For is read right to left, so a client can't
spoof its IP by sending the header itself.cmd/aotd main, demo seed
internal/auth password hashing/policy, sessions, rate limiter
internal/avatar upload validation and re-encoding
internal/day CET date logic
internal/db GORM open (SQLite/Postgres) and migrate
internal/linker background checks: streaming links, metadata, late MBID matches, popularity
internal/links streaming link parsing and canonical URLs
internal/listenbrainz ListenBrainz client: album popularity
internal/model GORM models
internal/musicbrainz MusicBrainz client
internal/spotify Spotify client: Web API if configured, else oEmbed
internal/store business rules and queries
internal/web handlers, middleware, templates, static assets