Join the Agent Deck Discord Server!
Discord에서 Agent Deck 커뮤니티 확인, 357명과 자유 음성·텍스트 채팅 이용
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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.
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.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