Letterlink is a Vite + React app for generating letter-based artwork from editable glyph setups. It loads a default project on first visit, lets you adjust per-letter anchors and accent placement, lays out names across printable boards, and exports SVG output for production.
npm install
npm run devUseful local commands:
npm run lint
npm run build
npm run previewScreenshot-friendly dev and preview servers for Codex or browser tooling:
npm run dev:codex
npm run preview:codex- Start from the bundled default project in
public/default-project.json, upload a font, or open a saved Letterlink project. - Adjust glyph anchors and accent positioning in the Prepare workspace.
- Enter names from text or CSV and tune board/render settings in the Configure workspace.
- Preview paginated boards and export SVG files for a single board or a ZIP archive of all boards.
The app is fully client-side. Active project data and language preference are stored in the browser via localStorage.
src/App.tsxcomposes the app shell and switches between the Prepare and Configure workspaces.src/hooks/useLetterlinkProject.tshandles project import, autosave, default-project bootstrap, and user-facing project feedback.src/hooks/useGlyphEditorState.tshandles glyph selection, anchor placement, and accent drag interactions.src/hooks/useConfiguratorState.tshandles text/CSV inputs, board settings, render settings, pagination, and export status.src/lib/contains reusable logic for rendering, glyph processing, i18n, import/export, layout, and persistence.
Run these before shipping changes:
npm run lint
npm run buildThis repo includes:
wrangler.tomlwithpages_build_output_dir = "dist"npm run deploy:cloudflarefor local/manual deploys.github/workflows/deploy-cloudflare.ymlfor GitHub Actions deploys
Manual deploy flow:
-
Authenticate Wrangler once:
npx wrangler login
-
Export your Cloudflare account id:
export CLOUDFLARE_ACCOUNT_ID=<your-account-id>
-
Deploy:
npm run deploy:cloudflare
By default the deploy script targets the letterlink Pages project. Override with:
CLOUDFLARE_PROJECT_NAME=my-pages-project npm run deploy:cloudflareYou can also deploy a specific branch:
npm run deploy:cloudflare -- --branch mainFor GitHub Actions deploys, configure:
CLOUDFLARE_API_TOKENCLOUDFLARE_ACCOUNT_ID
Optional repository variable:
CLOUDFLARE_PROJECT_NAME