Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
19 changes: 1 addition & 18 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,6 @@ jobs:
steps:
- uses: actions/checkout@v6
- uses: pnpm/action-setup@v6
with:
version: 10
- uses: actions/setup-node@v6
with:
node-version: 22
Expand All @@ -22,7 +20,6 @@ jobs:
- run: pnpm check:openapi
- run: pnpm build:types
- run: pnpm build:db
- run: pnpm build:email
- run: pnpm build:widget
- run: pnpm -F @saas-maker/api typecheck
- run: pnpm build:cockpit
Expand Down Expand Up @@ -50,7 +47,7 @@ jobs:
changed=false
while IFS= read -r path; do
case "$path" in
workers/api/*|packages/blocks/db/*|packages/blocks/email/*|packages/blocks/ops/*|packages/blocks/shared-types/*|package.json|pnpm-lock.yaml|pnpm-workspace.yaml|.github/workflows/ci.yml)
workers/api/*|packages/blocks/db/*|packages/blocks/ops/*|packages/blocks/shared-types/*|package.json|pnpm-lock.yaml|pnpm-workspace.yaml|.github/workflows/ci.yml)
changed=true
break
;;
Expand All @@ -63,8 +60,6 @@ jobs:
run: echo "No API-owned paths changed; skipping saasmaker-api deploy."
- uses: pnpm/action-setup@v6
if: steps.changes.outputs.changed == 'true'
with:
version: 10
- uses: actions/setup-node@v6
if: steps.changes.outputs.changed == 'true'
with:
Expand All @@ -76,8 +71,6 @@ jobs:
if: steps.changes.outputs.changed == 'true'
- run: pnpm build:db
if: steps.changes.outputs.changed == 'true'
- run: pnpm build:email
if: steps.changes.outputs.changed == 'true'
- name: Deploy API to Cloudflare Workers
if: steps.changes.outputs.changed == 'true'
run: cd workers/api && pnpm exec wrangler deploy
Expand Down Expand Up @@ -123,8 +116,6 @@ jobs:
run: echo "No Droid-owned paths changed; skipping saasmaker-droid deploy."
- uses: pnpm/action-setup@v6
if: steps.changes.outputs.changed == 'true'
with:
version: 10
- uses: actions/setup-node@v6
if: steps.changes.outputs.changed == 'true'
with:
Expand Down Expand Up @@ -174,8 +165,6 @@ jobs:
run: echo "No cockpit-owned paths changed; skipping saasmaker-dashboard deploy."
- uses: pnpm/action-setup@v6
if: steps.changes.outputs.changed == 'true'
with:
version: 10
- uses: actions/setup-node@v6
if: steps.changes.outputs.changed == 'true'
with:
Expand Down Expand Up @@ -225,8 +214,6 @@ jobs:
run: echo "No home-owned paths changed; skipping saas-maker-home deploy."
- uses: pnpm/action-setup@v6
if: steps.changes.outputs.changed == 'true'
with:
version: 10
- uses: actions/setup-node@v6
if: steps.changes.outputs.changed == 'true'
with:
Expand Down Expand Up @@ -279,8 +266,6 @@ jobs:
run: echo "No docs-owned paths changed; skipping saas-maker-docs deploy."
- uses: pnpm/action-setup@v6
if: steps.changes.outputs.changed == 'true'
with:
version: 10
- uses: actions/setup-node@v6
if: steps.changes.outputs.changed == 'true'
with:
Expand All @@ -305,8 +290,6 @@ jobs:
steps:
- uses: actions/checkout@v6
- uses: pnpm/action-setup@v6
with:
version: 10
- uses: actions/setup-node@v6
with:
node-version: 22
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
.turbo/
node_modules/
dist/
.next/
Expand Down
19 changes: 13 additions & 6 deletions PROJECT_STATUS.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Project Status

Last updated: 2026-06-10
Last updated: 2026-06-20

## Current Scope

Expand All @@ -18,18 +18,25 @@ SaaS Maker is the foundry helper for the fleet: a Cloudflare-first monorepo with
- AI Feedback Digest has a fixture-backed dry-run prototype in `packages/blocks/ops/src/feedback-digest.ts` with focused tests.
- Fleet guidance now requires each project to maintain a root `PROJECT_STATUS.md`.
- The public showcase now derives its project list, helper systems, and count from `foundry.projects.json`; the registry now includes `knowledgebase`, `pace`, `researchPapers`, and `sarthakagrawal`.
- **CI/turbo recovery (2026-06-20):** restored missing `turbo.json`, fixed CI pnpm version conflict, removed dead `build:email` steps, and pointed root tests back at `vitest run` (320 tests). Cockpit builds via turbo dependency graph.
- **API telemetry inlined (2026-06-20):** `workers/api/src/lib/telemetry.ts` replaces direct `@saas-maker/ops` usage in the API worker; `@saas-maker/ops` remains published for external consumers.
- **Dead email block removed (2026-06-20):** deleted orphaned `@saas-maker/email` package and Resend notification sends from feedback/waitlist routes. Email Workers migration remains tracked separately in fleet docs.

## Planned Next

1. Keep the fleet registry, README, AGENTS guidance, project status docs, helper classifications, health contracts, and public showcase synchronized as projects are added or retired.
2. Graduate Magic Form Builder only after product ownership, storage, preview, and integration boundaries are explicit.
3. Graduate AI Feedback Digest only after human-review, task writeback, and production AI-cost controls are explicit.
4. Tighten Task Workflows after real use: automatic Droid result capture, richer run status/events in the panel, and clearer artifact lifecycle controls.
5. Continue reducing stale deploy/docs references when concrete drift is found.
6. Execute the EOY DR plan in `docs/launch-kit.md` — target DR ≥ 20 on all seven owned domains by 2026-12-31 via staggered launches, directories, and linkable assets.
2. **RAG service cutover (PR #27):** wire knowledge routes to standalone `rag-service` (`RAG_BACKEND=local|dual|service`), add export/backfill endpoint, register health contracts.
3. **Astro landing tooling (PR #28):** ship `@saas-maker/astro-landing` CLI for Beasties critical CSS + landing overlay helpers.
4. **Fleet hub events (PR #25):** events sink + task queue + worker SDK for fleet project auth/integration.
5. Graduate Magic Form Builder only after product ownership, storage, preview, and integration boundaries are explicit.
6. Graduate AI Feedback Digest only after human-review, task writeback, and production AI-cost controls are explicit.
7. Tighten Task Workflows after real use: automatic Droid result capture, richer run status/events in the panel, and clearer artifact lifecycle controls.
8. Continue reducing stale deploy/docs references when concrete drift is found.
9. Execute the EOY DR plan in `docs/launch-kit.md` — target DR ≥ 20 on all seven owned domains by 2026-12-31 via staggered launches, directories, and linkable assets.

## Deferred / Parked

- Droid remains experimental, but Task Workflows is now the first concrete fleet workflow using Droid from Cockpit.
- Automatic task creation from AI feedback is deferred; humans should review digest output first.
- Production cron/AI workflows for block prototypes are parked until they have clear owners and rollback paths.
- Owner email notifications for feedback/waitlist are parked pending Cloudflare Email Workers provider work.
2 changes: 1 addition & 1 deletion apps/cockpit/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"private": true,
"scripts": {
"dev": "next dev",
"build": "pnpm -F @saas-maker/shared-types build && pnpm -F @saas-maker/sdk build && pnpm -F @saas-maker/ui build && next build --webpack",
"build": "next build --webpack",
"build:next": "next build",
"cf:build": "opennextjs-cloudflare build",
"deploy": "pnpm cf:build && wrangler deploy && node ../../scripts/smoke-prod.mjs",
Expand Down
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,14 @@
"build:types": "pnpm -F @saas-maker/shared-types build",
"build:db": "pnpm -F @saas-maker/ops build && pnpm -F @saas-maker/db build",
"build:api": "pnpm -F @saas-maker/api typecheck",
"build:cockpit": "pnpm -F @saas-maker/dashboard build",
"build:cockpit": "turbo run build --filter=@saas-maker/dashboard...",
"build:widget": "pnpm -F @saas-maker/feedback build",
"build:showcase": "pnpm -F @saas-maker/landing-page build",
"build:docs": "pnpm -F @saas-maker/docs build",
"generate:openapi": "node scripts/generate-openapi.mjs",
"check:openapi": "pnpm generate:openapi && git diff --exit-code -- packages/cli/src/openapi.json docs/openapi/openapi.json apps/docs/public/openapi.json",
"check:fleet-contracts": "node scripts/check-fleet-contract-sync.mjs",
"test": "turbo run test",
"test": "vitest run",
"test:integration": "vitest run --config vitest.integration.config.ts",
"test:e2e": "playwright test tests/e2e/api/",
"lint": "turbo run lint",
Expand Down
14 changes: 13 additions & 1 deletion packages/blocks/db/src/factory.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,19 @@
import { drizzle } from "drizzle-orm/d1";
import { drizzle as drizzleLibsql } from "drizzle-orm/libsql";
import { createClient } from "@libsql/client";
import { trace } from "@saas-maker/ops";

/** Time a DB operation (formerly @saas-maker/ops' trace — console timing, rethrows). */
async function trace<T>(name: string, fn: () => Promise<T>): Promise<T> {
const start = performance.now();
try {
const result = await fn();
console.info(`[trace] ${name} completed in ${(performance.now() - start).toFixed(2)}ms`);
return result;
} catch (err) {
console.error(`[trace] ${name} failed after ${(performance.now() - start).toFixed(2)}ms`);
throw err;
}
}

export interface DbConfig {
/**
Expand Down
19 changes: 0 additions & 19 deletions packages/blocks/email/.husky/pre-push

This file was deleted.

Loading