Issues / #82

Build nimsforestquoteportal — serve proposals to prospects

proposed feature Priority: high Project: nimsforestquoteportal Reporter: cederik 26 Mar 2026 16:32

Description

## Context

Nectar (sales nim) produces business cases but has no way to serve them externally. The ecommerce flow handles self-service, but custom proposals need a branded public portal where prospects can read and accept quotes.

## What it does

- Stores quotes in SQLite (markdown content, prospect details, status, expiry)
- Serves branded public pages at quote.nimsforest.com/q/{token}
- Renders markdown business cases in gardener-tone branding
- Accept button redirects to Stripe checkout (via nimsforeststripe)
- After payment: provisions forest (Pantheon org + landregistry)
- Tracks engagement: viewed, accepted, expired
- Taproot integration: tap.quoteportal.quotes.create/update/status
- Wind events: quoteportal.quote.created/viewed/accepted/expired

## Architecture

Nectar → tap.quoteportal.quotes.create → SQLite + token → public URL → prospect reads → accepts → Stripe → provisioning

## Stack

- Go CLI (cobra + yaml config + systemd)
- SQLite (modernc.org/sqlite, WAL mode)
- goldmark (markdown rendering)
- nimsforestwebcomponents (Tailwind, HTMX)
- Wind/NATS (taproot + events)
- Stripe integration via nimsforeststripe

## Port: 8098
## Domain: quote.nimsforest.com

## Related issues

- #77 Growth Engine Sprint playbook
- #78 Salix prospect

Comments (1)

nebula 26 Mar 2026 16:45
Grooming: set priority to high, changed project from nimsforest2 to nimsforestquoteportal

Nebula's reasoning: This is a new standalone service with its own repo, port (8098), and domain (quote.nimsforest.com) — it's not a modification to nimsforest2. Priority set to high because it's the delivery mechanism for the Growth Engine Sprint: without it, Nectar-generated proposals have no way to reach prospects. Directly tied to active sales pipeline (#77, #78).