Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
069de01
chore(ui): install shadcn popover, progress, and textarea components
espetro May 3, 2026
c6208f6
refactor(ui): migrate popovers and dropdown to shadcn
espetro May 3, 2026
ea2c91e
refactor(ui): migrate buttons and misc components to shadcn
espetro May 3, 2026
5fc7469
chore: update lockfile after shadcn component installs
espetro May 3, 2026
b44203a
refactor(ui): migrate remaining raw buttons to shadcn Button, fix tex…
espetro May 3, 2026
4053828
refactor(ui): migrate remaining raw HTML primitives to shadcn components
espetro May 3, 2026
3bc98d3
refactor(comments): use default exports for lazy loading
espetro May 4, 2026
529d661
refactor(routes): use direct file imports for lazy components
espetro May 4, 2026
12f7a23
refactor(ui): improve React type safety in error-boundary
espetro May 4, 2026
397e31e
refactor(ui): use PropsWithChildren pattern in prompt input
espetro May 4, 2026
69ed099
fix(ui): prevent text overflow in critique mode button
espetro May 4, 2026
faa095c
refactor(ui): clean up imports in feedback-modal
espetro May 4, 2026
ba7ae05
Merge branch 'feat/migrate-to-shadcn-components' into develop
espetro May 6, 2026
041eadf
chore: adjust exports and input types after previous merge 'ba7ae05'
espetro May 6, 2026
5888d43
fix(analytics): switch PostHog endpoint from EU to US cloud
espetro May 6, 2026
fb8f138
feat(analytics): enable PostHog initialization on app startup
espetro May 6, 2026
44aff93
ci(desktop): pass VITE_POSTHOG_KEY to desktop build
espetro May 6, 2026
15eb262
feat(settings): remove deprecated settings-modal and related components
espetro May 6, 2026
637f90d
feat(onboarding): remove deprecated welcome-modal
espetro May 6, 2026
a211ad0
feat(onboarding): remove showWelcomeAtom and clean up tests
espetro May 6, 2026
610845a
feat(canvas-hud): migrate onboarding-banner to shadcn design system
espetro May 6, 2026
79bbf2c
feat(routes): replace SettingsModal/WelcomeModal with SettingsDialog …
espetro May 6, 2026
4b9c18d
chore: update gitignore
espetro May 6, 2026
61dad2f
feat(feedback-proxy): add README
espetro May 6, 2026
0f55f56
feat(feedback-proxy): switch from GitHub Issues to Discussion comments
espetro May 6, 2026
7b94685
feat(feedback): update UI to show discussion comment URL
espetro May 6, 2026
a75e155
feat(onboarding): restore welcome-modal with original flow
espetro May 6, 2026
a2c9eee
fix(desktop): use `Updater.getLocalInfo` as indicated in electrobun lint
espetro May 6, 2026
079dad0
fix: re-run validate step and fix type issues
espetro May 6, 2026
e5a5070
fix(web): remove remaining use of hardcoded model names
espetro May 6, 2026
d3ff683
chore(web): remove dead code
espetro May 6, 2026
4eaf7ac
chore(changeset): configure unified versioning with fixed array
espetro May 6, 2026
de05bfd
chore: bump core packages to 0.5.0
espetro May 6, 2026
77eb375
chore: bump app packages to 0.5.0
espetro May 6, 2026
16009bb
chore: bump desktop and root to 0.5.0
espetro May 6, 2026
5347e4a
chore(electrobun): update version to 0.5.0
espetro May 6, 2026
1466a84
docs: update CHANGELOG for 0.4.0, 0.4.1, 0.5.0
espetro May 6, 2026
2ed9603
docs: add Release Process section to AGENTS.md
espetro May 6, 2026
daf7a72
docs: fix stale version.json references
espetro May 6, 2026
d6fd271
chore: remove orphaned apps/Resources/version.json
espetro May 6, 2026
1411080
feat: make validate available per-package via --cwd
espetro May 7, 2026
9855317
feat(settings): extract SettingsContent from SettingsDialog
espetro May 7, 2026
0644951
feat(settings): add data-tour attributes to settings UI elements
espetro May 7, 2026
4acecb4
feat(onboarding): add currentTourStepIdAtom for tour step tracking
espetro May 7, 2026
567654b
feat(onboarding): create SettingsTourView visual replica component
espetro May 7, 2026
c01f25b
feat(onboarding): extend tutorial tour with settings configuration steps
espetro May 7, 2026
13749cf
feat(onboarding): wire SettingsTourView and add ?tour query param
espetro May 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 15 additions & 1 deletion .changeset/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,21 @@
"$schema": "https://unpkg.com/@changesets/config@3.1.3/schema.json",
"changelog": "@changesets/cli/changelog",
"commit": false,
"fixed": [],
"fixed": [
[
"@app/web",
"@app/server",
"@app/landing",
"@app/cli",
"@app/feedback-proxy",
"@app/electrobun",
"@app/core",
"@app/shared",
"@app/pro",
"@app/analytics",
"@app/logger"
]
],
"linked": [],
"access": "restricted",
"baseBranch": "main",
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/desktop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@ jobs:
ELECTROBUN_APPLEAPIISSUER: ${{ secrets.APPLE_API_ISSUER }}
ELECTROBUN_APPLEAPIKEY: ${{ secrets.APPLE_API_KEY_ID }}
ELECTROBUN_APPLEAPIKEYPATH: /tmp/api_key.p8
VITE_POSTHOG_KEY: ${{ secrets.VITE_POSTHOG_KEY }}
- name: Cleanup API key
if: matrix.platform == 'darwin'
run: rm -f /tmp/api_key.p8
Expand Down
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ next-env.d.ts
.env
.env.local
.env*.local
.dev.vars
coverage/
.nyc_output/
.turbo/
Expand All @@ -47,6 +48,9 @@ tmp/
# ? > git config --global core.excludesfile ~/.gitignore-global
# ? > git config --global core.excludesfile

# cloudflare
.wrangler/

# project specific
*.db*
.osgrep
Expand Down
16 changes: 16 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,8 @@ bun test
bun run typecheck
```

> **Backpressure:** Run `bun run validate` (from repo root or any package dir) to check typecheck, lint, format, and tests. Use as gate before marking implementation tasks complete.

### Portless (Named Dev URLs)

Dev servers use [portless](https://github.com/vercel-labs/portless) for stable `.localhost` URLs instead of port numbers. First run auto-starts the HTTPS proxy on port 443 and generates a local CA (run `npx portless trust` if you see certificate warnings).
Expand Down Expand Up @@ -244,6 +246,20 @@ These defaults are wired into `use-settings.ts` via `NEXT_PUBLIC_*` variables so
Specs are written in Gauge Markdown and run via agent-browser.
See [docs/testing/e2e-specs.md](docs/testing/e2e-specs.md) for conventions, built-in steps, and how to add new ones.

---

## Release Process

Uses **@changesets/cli** with unified versioning (all 11 workspace packages in `fixed` array). Changesets only manages workspace packages — root and Electrobun version files need manual sync.

**Workflow:**
1. `bunx changeset` — describe change and bump type
2. `bunx changeset version` — bumps all workspace packages
3. Manually update: root `package.json`, root `CHANGELOG.md`
4. Commit and tag: `git commit -m "chore: release vX.Y.Z" && git tag vX.Y.Z && git push --tags`

Desktop builds via GitHub Actions on `v*` tags.

## Package-Specific Guides

Dive deeper into the area you're working on:
Expand Down
146 changes: 123 additions & 23 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,47 +5,147 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [0.3.0] - 2025-04-26
## [0.5.0] - 2026-05-06

### Added

- **Mastra AI Pipeline** — Full workflow-based design pipeline with Mastra, including workflow steps, stream consumer hook, and integration tests
- **Hono Server** — New standalone Hono server with CORS, route handlers, and API routes for the design pipeline
- **Vite Migration** — Web app migrated from Next.js to Vite with TanStack Router for SPA routing
- **Theme System** — Swappable Tailwind v4 theme infrastructure with shadcn/ui utilities
- **Internationalization** — New `lib/i18n` module with English translations and `lib/export` with `.design` format support
- **IndexedDB Hook** — Custom IndexedDB hook for client-side data persistence
- **Brand Rebrand** — Complete rebrand from Gosto to Calca with new logo assets, brand voice ADR, and updated UI copy
- **Onboarding** — Restored welcome-modal with original flow; replaced SettingsModal/WelcomeModal with SettingsDialog; migrated onboarding-banner to shadcn design system
- **Feedback** — Updated feedback UI to show discussion comment URL; switched feedback-proxy from GitHub Issues to Discussion comments
- **Desktop Context Menus** — Implemented frame clipboard, context menu, and keyboard shortcuts; added Duplicate, disabled states, and shortcut labels; added Delete menu item and accelerator shortcuts
- **NavigationMenu** — New shared NavigationMenu UI component replacing dropdown-menu patterns in context toolbar, remix button, and export menu
- **Custom Remix** — Added custom remix flow via prompt bar
- **Landing Page** — Built landing page with Astro, React, and Tailwind v4; added static assets, sections, and GitHub Pages deployment
- **Analytics** — Enabled PostHog initialization on app startup
- **Code Signing** — Added Apple code signing and notarization steps to desktop CI workflow; enabled signing in Electrobun config
- **Feedback Proxy CF Workers** — Added Cloudflare Workers deployment workflow; wired CF Workers entry point; extracted modules and scaffolding

### Changed

- **Pipeline Architecture** — Slimmed `use-generation-pipeline` to UI-only; Mastra stream consumer handles server communication
- **Brand Rename** — Renamed Gosto→Calca across all infrastructure files and feature code
- **shadcn Migration** — Migrated remaining raw HTML primitives, buttons, popovers, and dropdowns to shadcn components across the web app
- **Desktop Build** — Simplified build scripts with shared logger and extracted helpers; added build script with env loading and artifact prep
- **Mode Sidebar** — Improved mode sidebar and system prompt button layout
- **Desktop Context Menu** — Suppressed default WebKit context menu; fixed platform detection and wired web-to-native RPC

### Fixed

- Removed old API routes and wired remix/revision through the Mastra workflow
- Resolved AI SDK provider-utils version mismatch
- Added missing workspace dependencies and package exports for the Mastra pipeline
- Fixed request body passing as `inputData`
- Fixed index route availability with `createFileRoute`
- Fixed desktop `Updater.getLocalInfo` usage per electrobun lint
- Made feedback email required with disposable email validation
- Added react types back to web app
- Extracted action button to separate module
- Pinned `@tailwindcss/browser` to 4.2.4 for CI reliability
- Resolved workflow failures for feedback-proxy, desktop build, and landing page
- Only notarize in CI to avoid local build failures
- Cleaned up imports in feedback-modal
- Prevented text overflow in critique mode button
- Improved React type safety in error-boundary with PropsWithChildren pattern
- Used direct file imports for lazy route components
- Used default exports for lazy comment loading
- Migrated remaining raw buttons to shadcn Button, fixed textarea border
- Updated design card for desktop layouts
- Added Tailwind CSS browser build support for desktop

### Tests

- Added integration tests for Mastra design pipeline workflow
- Added rebrand verification tests
- Added unit tests for frame clipboard copy/paste

### Docs

- Updated pipeline route example to workflow pattern
- Consolidated architecture decisions into clean ADRs and PRD
- Cleaned up e2e testing best practices heading
- Fixed markdown formatting in PRD v2
- Removed roadmap directory
- Renumbered MADR files and added pro-package-architecture decision
- Updated project READMEs to match current state

### Chore

- Simplified `dev-web` script on root package.json
- Added Mastra + type-fest dependencies and created schemas + MADR 0012
- Updated lockfile for Calca rebrand dependencies
- Updated public icons and pro package readme
- Removed old `otto-icon.jpg` branding assets
- Updated gitignore
- Installed shadcn popover, progress, and textarea components
- Updated lockfile after shadcn component installs
- Added react-icons and mailchecker dependencies
- Extracted action button to separate module
- Updated desktop bun.lock

## [0.4.1] - 2026-05-03

### Fixed

- Replaced `zx` with Bun.spawn to fix Windows path corruption
- Searched for Windows binary extensions (`.cmd`, `.exe`, `.ps1`)
- Used POSIX paths in zx and `fs/promises` for file ops
- Resolved electrobun binary and Windows path issues
- Updated provider tests to match pass-through behavior
- Used vitest via `bun run test` and excluded dist tests from CI

### Changed

- Replaced `zx` with Bun shell for build scripts

### Chore

- Bumped desktop version to 0.4.0

## [0.4.0] - 2026-05-01

### Added

- **Desktop App** — Scaffolded Electrobun project with config, main process stub, build scripts, and native context menu; added application menu with Help > Report Bug
- **Auto-Updater** — Implemented auto-updater flow using Electrobun Updater API
- **Analytics** — Added PostHog client, events, types, and tests; instrumented web app with PostHog event tracking; added analytics opt-out toggle to General settings
- **Feedback** — Added feedback UI with bug icon, modal, and form; scaffolded feedback proxy with GitHub Issues creation via Octokit
- **Settings** — Added shadcn/ui components, Zod schemas, and new UI shells for settings and onboarding; added Reset to Factory Settings utility; added language section and improved provider card layout; added analyticsEnabled field; added required model and optional fallbackModel to settings types
- **Desktop CI/CD** — Added GitHub Actions CI/CD pipeline for desktop builds; added desktop tasks to Turborepo pipeline
- **Toolbar** — Added compass to zoom bar; redistributed toolbar into three FSD features
- **Error Boundary** — Added reusable ErrorBoundary component
- **AI SDK Telemetry** — Added AI SDK telemetry adapter and pipeline step transition logging

### Changed

- **Toolbar Rewrite** — Rewrote mode-sidebar with tooltips, lucide icons, and compact sizing; rewrote export-menu and remix-button to use dropdown-menu with hover behavior; unified canvas-hud styling
- **Desktop Scripts** — Replaced shell scripts with cross-platform TypeScript; consolidated scripts into single build command and cross-platform dev coordinator; broke down monolithic entry point into focused modules
- **Server** — Exported Hono app without starting server for embeddability; migrated console.* to @app/logger; removed custom logging wrapper
- **Frontend** — Replaced fetch with Hono RPC client; added shared dropdown-menu and tooltip components; replaced custom SVGs with lucide icons
- **Monorepo** — Simplified workspace imports to use package.json exports/imports; consolidated desktop to `platforms/desktop/` and removed stale scaffolds

### Fixed

- Probed user's configured models instead of hardcoded list; replaced MODEL_FALLBACK_CHAIN with buildModelFallbackChain; removed DEFAULT_MODEL from settings and pipeline
- Required model configuration in onboarding flow; removed Claude-only preset models from model picker
- Prevented welcome re-showing on reload and fixed tour re-render
- Migrated SettingsDialog to jotai atoms for state consistency
- Resolved CORS error by adding dev server proxy
- Bridged VITE_AI_* env vars from root .env to import.meta.env
- Fixed hardcoded colors and suppressed CDN warning; added semantic tokens and updated component colors; improved color visibility and mode differentiation
- Used custom jotai provider to sync desktop app bar functionality
- Removed idle timeout limit on electrobun
- Fixed HMR for server, dev scripts, and API proxy loop
- Improved server binding, dev detection, and added verification tooling
- Ensured loggers are initialized in all apps
- Implemented working cache with LRU eviction and fallback backoff
- Resolved hydration race causing onboarding to re-show on reload
- Resolved all TypeScript errors in @app/web
- Standardized lint/format/typecheck scripts across all workspaces

### Performance

- Lazy-loaded non-critical features and deferred devtools
- Added Vite code splitting with manualChunks
- Switched to `views://` protocol and added splash screen in desktop

### Docs

- Added auto-update, distribution, and storage migration plans for desktop
- Added AGENTS.md for desktop

### Chore

- Removed last mentions to 'gosto' in place of 'calca'
- Updated oxfmt config to sort imports
- Applied oxfmt and oxlint auto-fixes across codebase
- Disabled stylistic oxlint rules and fixed override syntax
- Ran formatter across the whole project
- Ensured oxlint and oxfmt are always executed with 'validate' script
- Updated bun.lock

## [0.1.0] - 2025-04-05

Expand Down
3 changes: 0 additions & 3 deletions apps/Resources/version.json

This file was deleted.

4 changes: 2 additions & 2 deletions apps/cli/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@app/cli",
"version": "0.3.0",
"version": "0.5.0",
"private": true,
"license": "AGPL-3.0",
"type": "module",
Expand All @@ -11,6 +11,6 @@
"test": "vitest run --passWithNoTests",
"lint": "oxlint --fix .",
"format": "oxfmt --write .",
"validate": "echo 'validate: not yet implemented'"
"validate": "bun ../../scripts/validate.ts --cwd $INIT_CWD"
}
}
50 changes: 50 additions & 0 deletions apps/feedback-proxy/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# Feedback Proxy

A Cloudflare Worker that accepts feedback submissions and posts comments to a GitHub Discussion.

## Endpoints

| Method | Path | Description |
|--------|------|-------------|
| `GET` | `/health` | Health check |
| `POST` | `/feedback` | Submit feedback → posts comment to Discussion #5 |

## Features

- **Rate limiting** — IP-based throttling via Cloudflare KV
- **Input validation** — Sanitizes and validates feedback payloads
- **CORS** — Restricts requests to `ALLOWED_ORIGIN`

## Local Development

```bash
# 1. Copy example secrets and fill in values
cp .dev.vars.example .dev.vars

# 2. Start local dev server
bun run dev:cf
```

## Deployment

```bash
# Create KV namespaces (first time only)
bunx wrangler kv namespace create RATE_LIMIT_KV --update-config
bunx wrangler kv namespace create RATE_LIMIT_KV --preview --update-config

# Set secrets
bunx wrangler secret put GITHUB_TOKEN
bunx wrangler secret put GITHUB_REPO
bunx wrangler secret put ALLOWED_ORIGIN

# Deploy
bun run deploy
```

## Environment Variables

| Variable | Description |
|----------|-------------|
| `GITHUB_TOKEN` | Personal access token with Discussions read/write permission (fine-grained PAT) |
| `GITHUB_REPO` | Target repository in `owner/repo` format |
| `ALLOWED_ORIGIN` | CORS origin (e.g., `https://calca.localhost`) |
6 changes: 4 additions & 2 deletions apps/feedback-proxy/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@app/feedback-proxy",
"version": "0.1.0",
"version": "0.5.0",
"private": true,
"description": "Feedback proxy server — validates input, rate-limits, and creates GitHub Issues",
"license": "AGPL-3.0",
Expand All @@ -11,7 +11,9 @@
"build": "bun build src/index.ts",
"deploy": "wrangler deploy",
"deploy:dry": "wrangler deploy --dry-run",
"typecheck": "bunx tsc --noEmit --project tsconfig.json"
"typecheck": "bunx tsc --noEmit --project tsconfig.json",
"test": "vitest run",
"validate": "bun ../../scripts/validate.ts --cwd $INIT_CWD"
},
"dependencies": {
"hono": "^4.0.0",
Expand Down
Loading
Loading