Main page. Just simple HTML, CSS and JS.
https://asxp.io
- Ruby 57.4%
- HTML 22.2%
- CSS 10.3%
- JavaScript 7.5%
- Nix 1%
- Other 1.6%
- owner_id (FK users, ON DELETE RESTRICT) + index on (owner_id, created_at DESC) - client_id (nullable FK clients, ON DELETE RESTRICT) for client back-references - issuer_snapshot jsonb + snapshot_version: invoices freeze the issuer's legal-entity fields at issue time so historical PDFs render unchanged when the user later edits their profile - voided_at + voided_reason: soft-void instead of delete, since invoices are retained indefinitely - swap unique(number) for unique(owner_id, number): numbers are now per-user, not global DROP CONSTRAINT uses IF EXISTS so the migration is resilient to the auto-generated constraint name differing across Postgres versions. |
||
|---|---|---|
| .forgejo/workflows | ||
| db/migrations | ||
| lib | ||
| public | ||
| views | ||
| .dockerignore | ||
| .env.example | ||
| .gitignore | ||
| asxpio.rb | ||
| CLAUDE.md | ||
| config.ru | ||
| docker-compose.yml | ||
| Dockerfile | ||
| flake.lock | ||
| flake.nix | ||
| Gemfile | ||
| Gemfile.lock | ||