···66RUN npm run build
7788FROM caddy:2-alpine
99+LABEL org.opencontainers.image.title="Atmosphere Office"
1010+LABEL org.opencontainers.image.description="Local-first office suite for the AT Protocol ecosystem"
1111+LABEL org.opencontainers.image.url="https://tangled.org/scottlanoue.com/atmosphere-office"
1212+LABEL org.opencontainers.image.source="https://tangled.org/scottlanoue.com/atmosphere-office"
1313+LABEL org.opencontainers.image.licenses="AGPL-3.0"
914COPY Caddyfile /etc/caddy/Caddyfile
1015COPY --from=builder /app/dist /srv
1116EXPOSE 8080
+38
README.md
···11+# Atmosphere Office
22+33+A local-first office suite for the [AT Protocol](https://atproto.com) ecosystem.
44+55+Documents, spreadsheets, slides, forms, diagrams, and calendars — all stored locally in your browser. Sign in with your Bluesky account.
66+77+## Features
88+99+- **Local-first** — your data stays in your browser's IndexedDB
1010+- **AT Proto identity** — sign in with any Bluesky handle
1111+- **No server required** — runs as a static site
1212+- **Offline capable** — works without an internet connection via service worker
1313+- **Dark mode** — automatic or manual theme switching
1414+1515+## Operator Deployment
1616+1717+PDS operators can host Atmosphere Office for their users:
1818+1919+```bash
2020+docker pull atcr.io/scottlanoue.com/atmosphere-office:latest
2121+docker compose up -d
2222+```
2323+2424+Configure `instance-info.json` to match your deployment flavor and enable features as you deploy backend services. See `docker-compose.yml` for details.
2525+2626+## Development
2727+2828+```bash
2929+npm ci
3030+npm test
3131+npm run build
3232+```
3333+3434+## License
3535+3636+[AGPL-3.0](LICENSE)
3737+3838+Built by [Atmosphere Mail LLC](https://atmospheremail.com).