Skip to content

chore: make the project discoverable (CI, container, community files, README) - #7

Merged
ashalliants merged 7 commits into
mainfrom
chore/github-discoverability
Jul 31, 2026
Merged

ashalliants merged 7 commits into
mainfrom
chore/github-discoverability

Conversation

@ashalliants

Copy link
Copy Markdown
Collaborator

Improves how the project is found and evaluated, plus two bug fixes found along the way.

Bugs fixed

The documented quickstart didn't work. docker-entrypoint.sh ignored "$@", so

docker compose run --rm quidly npm run set-password

ran migrations and started Next instead of printing a password hash — every new self-hoster hit this at step 3. Verified the break in a container and verified both paths after the fix.

A test failed 100% of the time in CI. apply.test.ts writes its scratch SQLite file into akaunting-migration/, which is git-ignored and so absent from a fresh clone; better-sqlite3 won't create the parent dir. Its 4 tests now actually run — 311 passing, 0 skipped.

Discoverability

  • CI — vitest + next build + a new typecheck script, on Node 22 to match the Dockerfile. Replaces the hardcoded tests badge with a live one.
  • Container — publishes ghcr.io/warlaxz/quidly for main and v* tags, linux/amd64 + linux/arm64, with signed build provenance. "Is there a Docker image?" is the go/no-go question for the self-hosting audience.
  • Compose — default file now pulls the image; docker-compose.build.yml overlays build: . for development or for operators who'd rather compile it themselves.
  • Community health files — CONTRIBUTING, SECURITY (routes to private advisories), CODE_OF_CONDUCT, PR template, and issue templates that capture install method, version and tax year. The tax-accuracy template requires an HMRC source link, which turns a wrong-figure report into something actionable.
  • Social preview — docs/social-preview.png (1280×640) using the app's own tokens, with its generator committed alongside. Still needs a manual upload via repo Settings; GitHub has no API for it.

README corrections

Two claims were wrong:

  • The badge said 261 passing while the dev section said 198 tests. Actual count is 311. Now a live CI badge that can't go stale.
  • It claimed rates were configured for 2025-26 only, when CONFIGURED_TAX_YEARS covers 2025-26 through 2027-28.

Also added a pull-based quickstart, a comparison table, "who it's for" phrased the way people search (buy-to-let, HMO, portfolio, SA105, Section 24), and an explicit statement that Quidly does not file with HMRC and cannot make Making Tax Digital submissions.

The comparison table comes out as categories rather than named products deliberately — a table asserting specific feature claims about FreeAgent or Landlord Studio could be wrong or go stale, which is a credibility risk on a repo about tax accuracy.

Verification

311/311 tests · next build passes · tsc --noEmit clean · all 9 YAML files parse · both compose paths validate · all 4 new external links return 200.

Still needs repo admin (not doable via API with push-only access)

  • Topics, homepage, description, enable Discussions, disable the empty Wiki
  • Upload docs/social-preview.png in Settings → General → Social preview
  • After the first publish, make the GHCR package public — it defaults to private, which would make the docker pull this README now recommends fail for everyone

The entrypoint ignored "$@" entirely, so the documented setup step

  docker compose run --rm quidly npm run set-password

ran migrations and then started Next rather than printing a password hash —
breaking step 3 of the quickstart for every new self-hoster.

Exec the passed command as the app user when there is one, after preparing
/data but before migrate/seed, so one-shot commands don't touch the database.
apply.test.ts writes its scratch SQLite file into akaunting-migration/, which
is git-ignored and therefore absent from a fresh clone. better-sqlite3 won't
create the parent directory, so the suite failed to load with "Cannot open
database because the directory does not exist" — 100% of the time in CI, and
locally for anyone who hadn't run the migration tooling first.

Its 4 tests now actually execute: 311 passing, 0 skipped.
CI runs vitest, next build, and a new `typecheck` script on every push and PR,
so the README can carry a live status badge instead of a hardcoded test count.
Node 22 matches the Dockerfile runtime. Typecheck runs after the build so the
generated route types under .next/types are on disk and get checked.

The publish workflow pushes ghcr.io/warlaxz/quidly for main and v* tags,
linux/amd64 + linux/arm64, with signed build provenance. Self-hosters can now
`docker compose pull` rather than building from source — the first thing the
r/selfhosted audience looks for. The image name is lowercased at runtime
because GHCR rejects uppercase and the owner is "WarlaxZ".
GitHub surfaces these in the issue/PR UI and in its community-standards
checklist, and their absence reads as an unmaintained project to anyone
evaluating whether to trust the app with their tax records.

Templates capture the things a diagnosis almost always turns on — install
method, version, and tax year — and route security reports to a private
advisory rather than a public issue. The tax-accuracy template requires an
HMRC source link, which makes a wrong-figure report actionable instead of a
disagreement.

CONTRIBUTING records the conventions that already govern the codebase
(integer pence, hand-authored Prisma SQL, Next 16 docs) and states the
deliberate scope limits: single-user per install, UK-only.

FUNDING.yml is left commented out — uncomment a platform once one is set up.
Every share on Reddit, HN, Discord or X currently renders GitHub's grey
auto-generated card. This uses the app's own tokens — forest #1f3d30, cream
#f4f1e6, ochre rule, Fraunces + Hanken Grotesk — so a shared link looks like
the product.

The generating HTML is committed alongside it so the card can be regenerated
rather than reverse-engineered. GitHub has no API for social preview images,
so the PNG still has to be uploaded via repo Settings by hand.
Corrections:
- Tests badge claimed "261 passing" while the dev section said "198 tests";
  the real count is 311. Replaced with a live CI badge that can't go stale.
- Rates are configured for 2025-26, 2026-27 and 2027-28, not just 2025-26 —
  the old text undersold three years of work (see CONFIGURED_TAX_YEARS).

Additions for discovery and conversion:
- Quick start is now `docker compose pull`-based, with the build-from-source
  path kept for people who won't run someone else's binary.
- A comparison table, and "who it's for" phrased the way people search:
  buy-to-let, HMO, portfolio, Self Assessment, SA105, Section 24.
- An explicit statement that Quidly does not file with HMRC and cannot make
  Making Tax Digital submissions, since that's the first question a landlord
  reading this in 2026 will have.

Alternatives are compared as categories rather than named products, so the
table can't go stale or misstate a competitor's feature set.
docker-compose.yml now pulls ghcr.io/warlaxz/quidly:latest so the quickstart
is a pull rather than a local build. docker-compose.build.yml overlays
`build: .` for development, or for operators who'd rather compile the thing
handling their financial data themselves.
@ashalliants
ashalliants merged commit dafe7b2 into main Jul 31, 2026
1 check passed
@ashalliants
ashalliants deleted the chore/github-discoverability branch July 31, 2026 19:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant