Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

92 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

livechat

Accessibility-first, multi-tenant live chat support widget embeddable on arbitrary client websites via a JS snippet.

This repo started life as a Tenon.io-era spec that was written but never built (see the original post, Build vs. Buy is even harder when you care about accessibility). It is now being built as an AFixt product.

Status

Phase 0 (repo foundations) complete — tooling, CI, ADRs, workspace scaffolds. Implementation work is sequenced by phase in .claude/plans/ and tracked in GitHub issues.

Start here

  • CLAUDE.md — orientation for Claude Code and new contributors
  • requirements.md — product spec (RFC 2119 language)
  • docs/adr/ — architecture decisions
  • usecases/ — every user-facing interaction as .uc.yaml, per ADR-0002

Setup

nvm use                 # Node 22, per .nvmrc
bash scripts/bootstrap.sh   # install local tool binaries (semgrep, osv-scanner, trufflehog, lychee)
npm ci                  # install workspace dependencies
docker compose up -d    # MySQL + Redis + MailHog + MinIO
npm run dev             # run api, ui, and widget in parallel

Then npm run check:all should pass on a clean clone — it is the same gate Husky runs on pre-push.

@afixt/* packages and NPM_TOKEN

This repo installs private @afixt/* scoped packages (usecase-runner, a11y-assert). In CI, npm authenticates via an organization-level GitHub Actions secret named NPM_TOKENactions/setup-node writes a runner-local .npmrc from it, which is why no auth token is committed to this repo's .npmrc (local installs keep using your own credentials).

If installing an @afixt/* package returns 404, that is an authentication problem, not a missing package. The usual cause is a stale repo-level NPM_TOKEN secret shadowing the org-level one — delete the repo-level secret rather than overriding it per repository.

Scripts

From the repo root:

Script Purpose
npm run dev Run api, ui, widget in parallel
npm run check lint + typecheck + stylelint + markdownlint + usecases:validate
npm run check:all check + test + build + size + dupes + links + security + license:check (pre-push gate)
npm test Vitest across workspaces
npm run test:e2e Generate Playwright specs from usecases/ and run them
docker compose up MySQL + Redis + MailHog + MinIO + api + ui + widget-preview

Contributing

  • Node 22 (pinned via .nvmrc and engines)
  • Conventional Commits enforced via Husky commit-msg
  • Run scripts/bootstrap.sh once to install local tool binaries (semgrep, osv-scanner, trufflehog, lychee) required by pre-push hooks
  • All user-facing changes must include a corresponding .uc.yaml update (enforced by a CI diff gate)
  • Note user-visible changes under ## [Unreleased] in CHANGELOG.md; the release flow promotes that section to the new version heading

License

Proprietary. © AFixt. This is a private product ("private": true); it is not licensed for external use or redistribution.

About

No description, website, or topics provided.

Resources

Stars

5 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages