Tap is a proof-of-concept editor for screenplays formatted in Fountain markup. It stores all data in AT Protocol records.
Go 61.7%
TypeScript 23.2%
HTML 11.3%
CSS 3.2%
Dockerfile 0.5%
Other 0.1%
38 4 0

Clone this repository

https://tangled.org/limeleaf.coop/tap-app https://tangled.org/did:plc:ewi2aoat66wrvypvc7clrfvk/tap-app
git@tangled.org:limeleaf.coop/tap-app git@tangled.org:did:plc:ewi2aoat66wrvypvc7clrfvk/tap-app

For self-hosted knots, clone URLs may differ based on your setup.

Download tar.gz
README.md

Tap – A Minimal Fountain Editor (Go + Web Components)#

This repository hosts a Go-powered Fountain editor UI implemented with vanilla Web Components and server-side rendering in Go templates.

The app renders HTML previews via a Go endpoint and uses a small client bundle built with esbuild. No React/Next.js is required.

A demo server is running at https://tapapp.lol.

Authentication#

Tap uses OAuth authentication. Enter your Bluesky or personal AT Protocol handle to sign in. You will be redirected to your PDS (personal data server) to authorize the Tap app.

Export features#

  • Export builds a .fountain file in plain text format and triggers a download.
  • Download PDF generates a PDF from the preview content and triggers a download

Development#

Run the web components watcher in one terminal:

npm run dev:wc

Run the Go server in another terminal:

npm run dev:go
# or manually:
# (cd server && PORT=8088 go run .)

Open the app at:

http://127.0.0.1:8088

What’s included#

  • web/ – TypeScript sources for Web Components
    • <tap-app> top-level orchestrator
    • <tap-toolbar> controls (Preview toggle, Hide notes, Export)
    • <tap-editor> textarea-based editor (MVP)
    • <tap-preview> renders HTML from the Go /preview endpoint
  • server/templates/ – Go HTML templates
    • index.html renders <tap-app> and includes /static/js/tap.js
  • server/static/ – CSS and built JS
    • styles.css screenplay styles
    • js/tap.js built bundle output
  • server/tap/ – Go Fountain parser/renderer

Build (production bundle)#

npm run build:wc