Trellis
A multi-tenant wine club billing platform, built to replace a discontinued vendor for about 800 club members at 14 Acres, and designed to sell to other wineries.
https://sammishin.dev/work/trellis
- Role
- Design, architecture, review & testing
- Status
- In development · first live charges Jan 2027
- Stack
- Next.js, TypeScript, PostgreSQL, Render
- How it’s built
- AI-assisted; I review and test every change

Customer and context
14 Acres Vineyard & Winery is a working winery and tasting room in Ridgefield, Washington. Its wine club has about 800 members who are charged on a schedule, and every charge goes through the Clover POS the tasting room already uses.
Staff manage members in Trellis’s admin; members get their own pages.
The wine club manager runs club billing quarterly, but every staff member uses the wine club software: to check which customers are club members, and to make sure their details and card on file are accurate.
Discovery
What they asked for: a replacement for the winery’s club billing vendor, which was discontinued.
The real problem: whatever replaced it had to be trustworthy with money from day one, charge through the Clover account the winery already runs on, and not need a rewrite to serve other wineries later.
What went wrong with the old software: it was very buggy, with many problems and critical security issues. There were so many issues that staff stopped using it.
Constraints
- Existing systems: every charge has to go through Clover, the POS the tasting room already uses.
- Money: about 800 members are billed on a schedule, so a retried job can never charge someone twice.
- Timeline: first live member charges are planned for January 2027.
- Budget: as cheap as possible while still producing viable software.
- How it’s built: I design and direct an AI-assisted build, and review and test every change.
What I shipped
Staff manage members in the Next.js app. Workers on Render run the charge schedule and call Clover. Every table carries a winery ID, and Postgres row-level security means one winery can never read another’s data.
No double charges
Each Clover payment carries an idempotency key, so a retried job can’t bill a member twice.
Multi-tenant from day one
Tenant IDs and row-level security now, so selling to other wineries doesn’t mean a rewrite.
CI on every push
GitHub Actions runs lint, tests and a secret scan before anything merges.
[Paste a short, real excerpt here, e.g. the idempotency-key charge call]
Rollout and training
Trellis isn’t live yet. First live member charges are planned for January 2027.
[Add after go-live: the plan for moving about 800 members off the old vendor (validation, cutover, rollback), and how staff learned the admin]
Results
[Add after January 2027: charges run, failed charges caught, and time saved compared with the old vendor]
What broke and what I changed
[Add: something that broke or didn’t fit during the build, and what you changed because of it]
What’s next
- First live member charges, January 2027
- Monitoring and alerts for failed charges, an admin audit log of who changed what, and a short runbook for when billing fails
- A member self-service page once the MVP is stable
- An Android app once the MVP is done
- Offering it to other wineries