jbrechtel 1c19d97dc8 feat: add Playwright e2e smoke test covering signup → household → chore flow
- Added smoke.spec.js with Playwright test for full user flow:
  1. Sign up (fill form, submit, click 'Go to Dashboard')
  2. Create household (fill name, submit)
  3. Create chore (fill name + date, submit)
  4. Verify session persistence (revisit dashboard)
- Server now supports --db flag for temp databases and SIS_FRESH_DB env
  to delete the db file on startup (for clean test runs)
- Server reads SIS_PORT env var for port configuration
- scripts/test-e2e: starts server with fresh db, runs tests, cleans up
- playwright.config.js: minimal config pointing at test/e2e/
2026-07-16 10:01:33 -04:00
2026-07-15 21:21:21 -04:00
2026-07-15 14:51:27 -04:00
2026-07-15 15:57:44 -04:00
2026-07-15 14:51:27 -04:00

Sis

Sis (short for Sisyphus) is a todo tracker meant primarily for households, families or other groups of people with shared repeated responsibilities like chores.

The goal of Sis is to make it easy for users to keep track of which tasks need to be completed and when while allowing any user to complete a given task and provide visibility to other users that a task has been completed.

Sis is a web application written entirely in Haskell using Hyperbole, a serverside web framework inspired by HTMX, Elm, and Phoenix LiveView. There is zero application JavaScript in the source code.

Stack

  • Framework: Hyperbole — Haskell serverside web framework
  • CSS: Neo Brutalism CDN
  • Database: SQLite via sqlite-simple with effectful effect system
  • Build: Stack with GHC 9.10

Architecture

Sis is a single Haskell application. All HTML is rendered serverside via Hyperbole's Page/HyperView system. User interactions are sent over WebSocket with VirtualDOM-based page updates.

sis/
├── app/Main.hs              # Hyperbole app entry, Warp setup, route dispatch
├── src/
├─├── Sis.hs                 # Top-level re-exports
│   ├── Sis/Route.hs         # Route ADT
│   ├── Sis/Types.hs         # Core domain types
│   ├── Sis/Database.hs      # effectful DB effect + SQLite handler
│   ├── Sis/Auth.hs          # Password hashing
│   ├── Sis/Page/            # One module per page
│   │   ├── Login.hs
│   │   ├── Signup.hs
│   │   ├── Dashboard.hs
│   │   ├── Chores.hs
│   │   ├── Household.hs
│   │   └── Activity.hs
│   ├── Sis/View/            # Reusable view components
│   │   └── Layout.hs
│   └── Sis/Style.hs         # Neo Brutalism class helpers
├── frontend/static/         # Static CSS + PWA manifest
├── test/Spec.hs             # Hspec test suite
├── scripts/                 # build, test, run
├── package.yaml             # Haskell deps (hpack source of truth)
├── stack.yaml               # Stack resolver config
└── Dockerfile               # Production image

Development

# Build
./scripts/build

# Test
./scripts/test

# Run (starts on port 8080)
./scripts/run
S
Description
Family chore tracker
Readme 1.1 MiB
Languages
Haskell 84.2%
JavaScript 9.9%
Shell 4.4%
CSS 1.1%
Dockerfile 0.4%