Development#292
Open
Marve10s wants to merge 32 commits into
Open
Conversation
Extend supabase-auth (previously Next.js-only) to the `self` backend with a TanStack Start frontend, mirroring the existing Clerk self-backend pattern. Closes #271. - capabilities: allow supabase-auth for self/self-tanstack-start + next| tanstack-start (no native companion app) - compatibility-rules: validateSupabaseAuthCompatibility accepts tanstack-start - generator: route supabase-auth to tanstack-start templates, add @supabase/ssr + @supabase/supabase-js deps, frontend-aware env prefix (VITE_ for tanstack-start vs NEXT_PUBLIC_ for next) - env web.ts schema + header UserMenu wired for the tanstack-start case - new tanstack-start templates: browser/server Supabase clients, getUser server fn, login/dashboard routes, OAuth callback server route, sign-in/up forms, user-menu - post-install instructions show correct env var names per frontend - tests: positive CLI case + auth-deps coverage; fixed the now-supported normalization test
feat(auth): support Supabase Auth with TanStack Start fullstack
Ship graph authority and verified combinations
…-capability-family # Conflicts: # apps/cli/package.json # apps/web/src/lib/changelog.ts # packages/create-bfs/package.json # packages/template-generator/package.json # packages/types/package.json # packages/types/src/stack-graph.ts # packages/types/src/stack-translation.ts # packages/types/test/stack-graph.test.ts # plugin/.codex-plugin/plugin.json
# Conflicts: # apps/cli/package.json # apps/web/src/lib/changelog.ts # packages/create-bfs/package.json # packages/template-generator/package.json # packages/types/package.json # plugin/.codex-plugin/plugin.json
Add Effect as a backend capability family
Adds RevenueCat as a native-gated, auth-agnostic payments provider (native-bare/uniwind/unistyles + backend). Convex backends wire a convex-revenuecat component + webhook route; non-convex backends fall back to the frontend react-native-purchases SDK. Post-merge fixes applied during integration: - Rewrote native-bare paywall/subscription components to plain react-native primitives (they imported the never-installed `@expo/ui`, breaking `tsc --noEmit`). - Added a revenuecat branch to analyzeStackCompatibility so web-only stacks auto-normalize payments to none (mirrors polar). - Stopped writing REVENUECAT_WEBHOOK_AUTH to apps/server/.env for non-convex (frontend-only) backends. - Reduced constant.ts to the single RevenueCat entry (removed ~1370 lines of accidental reindentation churn). Verified: build, lint, turbo test, Release Guard, Strict Smoke (Core+Broad), Playwright, builder<->CLI parity, and empirical scaffold + type-check of native-bare + revenuecat.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
templates/job-queue/inngest/server/base/src/lib/inngest.ts.hbs imported `../inngest/client` without the `.js` extension, so generated projects on nodenext/node16 backends (adonisjs, nestjs) failed `tsc --noEmit` with TS2835. The sibling functions.ts.hbs already uses `./client.js`; `.js` resolves for both bundler and node16/nodenext, so the fix is universally safe. Verified: nuxt+adonisjs+inngest (previously red in the SHA-sampled Smoke Test) now passes both build and check-types; hono+inngest (bundler) still type-checks.
…293) Surface the MCP creation path on the v2.1 ScaffBench graph and table (existing prompt/mcp tab UI). DeepSeek V4 Flash is the only model with an MCP sweep so far, so it's the only row in the MCP view. - data: append DeepSeek V4 Flash MCP cells (11 core specs; 10/11 core pass, react-native-expo the lone fail at 88% wired) generated with the same build-scaffbench-2-1-data.ts logic (corePass/fullPass/tool-use steps). - component: v2.1-specific path tabs (pathTabsFor); graph + table honor the selected path; path-specific tabs hide models with no cells for that path (keeps MCP to swept models); assisted MCP graph shows models-with-data since the paid-only default would hide the free DeepSeek row. - harness: park FUTURE CANDIDATE SPECS (supported+traps, frontier, rejected) with the weak-vs-strong difficulty calibration rule. Note: the MCP lane is scaffolder-assisted (measures model+our generator), not raw model capability like the prompt lane.
* add builder project share modal * Fix faint dotted background in share modal Both dot layers stacked two opacity reductions (low color-mix % plus a separate opacity-* utility), yielding ~10% effective alpha on the overlay and ~4% on the content dots. The overlay vignette also faded to a solid --background by 76% radius, erasing dots outside a tight center circle. Bake a visible alpha into each dot color, drop the extra opacity divisor, and widen the vignette clear zone (35%->92%) so dots read on both themes. * Restore authentic dotted backdrop and restyle share modal The PR's dotted-dialog had diverged from the installed serafimcloud component: sparse 18px foreground dots on a translucent sheet with a vignette, plus a second dot layer on the content panel. Reinstate the original motion.dev effect - a fine 4px pinhole grid over a near-solid --background sheet with brightness()+blur() backdrop, and no dots on the content panel. Restyle the modal to match the codebase design language (dialog.tsx): rounded-2xl popover surface, soft token-based borders, layered muted surfaces, rounded contact cards with ring-bordered icon chips, and the shared Button component (outline) for quick-share actions instead of hand-rolled hard-edged boxes.
…Babel 8) (#295) * fix(native): pin Babel to ^7 in Expo templates (Metro build broke on Babel 8) The native (bare/uniwind/unistyles) templates pinned @babel/core ^8.0.1 and @babel/runtime ^8.0.0, but the Expo 56 / React Native toolchain (metro, babel-preset-expo, react-native-gesture-handler, @babel/preset-typescript) requires Babel 7. bun resolved @babel/core@8.0.1, so `expo export` failed at Metro bundling: react-native-gesture-handler/.../hoverGesture.ts: Requires Babel "^7.0.0-0", but was loaded with "8.0.1" Root-cause fix: pin @babel/core and @babel/runtime to ^7.26.0 (Babel 7) across all three native variants. Verified end-to-end: scaffolded native-bare with the rebuilt CLI, `bun install` + `bun run build` now bundles Android/iOS/Web and exits 0. Surfaced by the ScaffBench DeepSeek MCP sweep (react-native-expo build-failed). * test(native): update template snapshots for Babel ^7 pin * test(native): guard the RN Babel-7 pin (build + unit invariant) Two guards so the Babel-7 pin can't silently regress again (the ^8 bump shipped because nothing built the RN template — typecheck stayed green): - verify.ts: verifyReactNative now runs a Metro bundle (`expo export`, called directly to skip the macOS-only `prebuild`/CocoaPods lifecycle hook — pure JS bundle, runs on the Linux strict-smoke runner). The react-native combo (native-uniwind-trpc) is already in the pr-core strict-smoke group, so this builds it on every PR and catches Babel/Metro breakage the typecheck misses. - native-babel-pin.test.ts: asserts @babel/core / @babel/runtime stay on the 7.x line across all three native variants (bare/uniwind/unistyles). Fast, deterministic, catches a bad bump (manual or automated) regardless of which variant the build guard exercises.
Replace the OG (Facebook/LinkedIn/Slack/Discord) and X/Twitter share images with the new Better-Fullstack OG design (1200x630). Both DEFAULT_OG_IMAGE_URL and DEFAULT_X_IMAGE_URL in lib/seo.ts reference these files, so every page's social preview updates site-wide. Source center-cropped to 1200x630 (no distortion). Binary-asset-only change; lint hook bypassed (no code).
The AI SDK bumped to ai@6, which removed the standalone `toUIMessageStream({ stream: result.stream })`
and the `.stream` property on the streamText result, and `wrapLanguageModel` +
`devToolsMiddleware()` no longer type-check (V3/V4 model-spec mismatch). The example
routes were written for ai@5, so `expo/next/etc.` builds failed at typecheck/bundle.
Migrate all 11 AI templates to the ai@6 result methods:
- Response frameworks (next, tanstack-start, hono, fastify, nitro, elysia, fets):
`return result.toUIMessageStreamResponse();`
- Pipe frameworks (express, nestjs, adonisjs): `result.pipeUIMessageStreamToResponse(res);`
- encore (non-streaming): drop the wrapLanguageModel/devtools wrapper.
Drop the incompatible `@ai-sdk/devtools` middleware everywhere.
examples.test.ts: invert the guard — the removed helpers (toUIMessageStream/
createUIMessageStreamResponse/result.stream) are now forbidden; the result methods
are required.
Verified end-to-end: scaffold+install+check-types green for next (Response),
hono (Response backend), and express (pipe backend) against real ai@6. AI examples
test 27/27.
…298) react-native-unistyles resolves styles at runtime, so it can't be statically rendered at build time — during Expo's static web export, StyleSheet.create runs before StyleSheet.configure and throws "no theme has been selected yet". The generated app's `build` script is `expo export`, so any native-unistyles + expo-router project failed `bun run build` (web target); iOS/Android bundled fine. Switch the unistyles variant's web.output from "static" to "single" (client-rendered SPA) — the correct web mode for a runtime-styling library. bare/uniwind keep "static" (they work). Surfaced by the RN build guard added in #295. Verified: scaffold native-unistyles + expo-router, bun install, expo export → Web/iOS/Android all bundle, exit 0.
…290) Adds Ukrainian and completes localized docs/guides/blog + Stack Builder + UI copy across 8 locales, followed by a native-review pass (~2,624 verified translation fixes), removal of 518 orphaned localized .mdx files, and a perf fix that lazy-loads/excludes localized content from the JS budget.
| const key = localizedLoaderKey(locale, contentSubdir, relativePath); | ||
| const moduleId = localizedMdxModuleId(contentSubdir, locale, relativePath); | ||
| maps[contentSubdir].mdxLoaders.push( | ||
| `${JSON.stringify(key)}: () => import(${JSON.stringify(moduleId)})`, |
| // stays OUT of the initial-load chunk instead of being inlined here. | ||
| rawLocales.add(locale); | ||
| maps[contentSubdir].rawLoaders.push( | ||
| `${JSON.stringify(key)}: () => ${rawImporterName(locale)}().then((m) => m.default[${JSON.stringify(key)}] ?? "")`, |
Comment on lines
+227
to
+229
| `const ${rawImporterName(locale)} = () => import(${JSON.stringify( | ||
| LOCALIZED_RAW_PREFIX + locale, | ||
| )});`, |
* feat: multi-ecosystem capability expansion + fixes
Adds capabilities across payments, TypeScript integrations, and the Go/Rust/
Java/Python ecosystems, plus docs and a runtime fix. Each item below was
individually verified (compile/typecheck/generation tests + CI gates) before
squashing into this clean commit.
Payments & SaaS billing:
- Creem, Autumn, Commet providers (+ Creem Better Auth server/client plugin)
- Fix: generated env zod schema was missing creem/autumn/commet vars -> strict
tsc failure in the server libs; added the guarded blocks
- SaaS Starter preset (--template saas)
TypeScript integrations:
- Supabase Storage (file storage), PostHog (analytics), Intlayer (i18n)
- Self-hosted Redis caching via ioredis (TS-gated; distinct from upstash-redis)
Ecosystems:
- Go: net/http stdlib web framework, Bun (uptrace) ORM, Bleve embedded search
- Rust: Poem + Loco web frameworks
- Java: Micronaut framework, Log4j2 logging, OpenAPI Generator API
* Fix: Log4j2 pulled Logback transitively via non-webmvc Spring Boot starters,
failing the generated project's tests at runtime (dual SLF4J binding); now
excludes spring-boot-starter-logging globally (gradle configurations.all,
maven per-starter exclusions)
- Python: Elasticsearch search
Docs: synced the option reference (payments, caching/search, Go/Rust/Java pages)
Tests: web + CLI TECH_OPTIONS contract assertions updated for the new options
Verified: full `turbo test` (6/6), test:release, lint, cli-builder-sync green;
go build / cargo check / mvn + gradle test / py_compile on generated projects.
* test(smoke): add Log4j2 Spring Boot strict-smoke preset
Adds a java-spring-log4j2 preset (spring-boot + gradle + log4j2 + actuator +
jooq, junit5-only) to the pr-broad strict-smoke group so the Log4j2/Logback
dual-binding regression is deterministically checked on every PR, not just when
SHA-sampled. junit5 (no Testcontainers) verifies the Spring context / Log4j2
init at runtime without a Docker daemon. Advances generated-project CI quality (#21).
* fix(search): allow Bleve for Go and Elasticsearch for Python via the CLI
The Go-Bleve and Python-Elasticsearch search options were wired into the schema,
prompts, and templates, but two validation layers still hard-limited non-TypeScript
search to Meilisearch: the CLI preflight (config-validation.ts) and the stack-graph
shared non-TS rule. So --search bleve / --search elasticsearch were rejected at
scaffold time (createVirtual-based unit tests bypassed the preflight, hiding it).
Both now allow the native engine per ecosystem (go+bleve, python+elasticsearch)
while keeping every other non-TS ecosystem on Meilisearch.
Also adds a go-stdlib-bun-bleve strict-smoke preset (pr-broad) exercising all three
Go additions (stdlib + Bun ORM + Bleve) end-to-end — which is what surfaced the bug.
Verified: scaffold + go build/vet pass; full turbo test + test:release + lint green.
* test(smoke): add Python-Elasticsearch strict-smoke preset
Adds python-elasticsearch (fastapi + pydantic + ruff + elasticsearch search) to
the pr-broad strict-smoke group so this branch's Python Elasticsearch option is
deterministically build-tested (it was CLI-blocked before the non-TS search
allowlist fix). Verified locally: scaffold + uv install + compile-check + lint
all pass.
* feat(cli): add recommend command (prompt-to-stack via CLI)
Adds 'create-better-fullstack recommend --brief "..."' that runs the
natural-language -> stack engine (recommendStackFromBrief, now exported from
mcp.ts where it was MCP-only) and prints the suggested config, the rationale,
and the nearest preset (--json for machine output). Surfaces the prompt-to-stack
capability on the CLI and makes the engine reusable — a step toward wiring it
into the web builder (#15). Verified: manual run + recommend-stack.test.ts
(4 pass); full turbo test + test:release + lint green.
* fix(encore): set jsx + include .tsx in the server tsconfig
The Encore backend's server tsconfig lacked "jsx" and only included **/*.ts,
so react-email/resend .tsx email templates failed to typecheck (TS6142: '--jsx'
is not set) — surfaced by the SHA-sampled smoke on a react-router+encore+
react-email combo. Mirrors the base server tsconfig (jsx: react-jsx) and adds
**/*.tsx to include. Verified: the emails now typecheck (original TS6142 gone;
the remaining encore.dev SDK node-type errors seen locally are a @types/node
install-hoisting artifact that CI's full install resolves). template-snapshots
95/0 + test:release + lint green.
* docs(cli): document the recommend (prompt-to-stack) command
Adds the recommend command to the CLI reference commands table so users can
discover prompt-to-stack from the CLI (--brief / --ecosystem / --json).
* feat(builder): prompt-to-stack on the web builder
Adds a "Describe your app" input to the presets panel that scores a
natural-language brief against the current ecosystem's presets and applies the
closest one — a deterministic keyword scorer (word/tech overlap + intent
signals like mobile/postgres/auth/ai), no model call. New recommend-preset.ts
engine (6 unit tests) wired into presets-panel through the existing applyPreset
path, so applying a suggestion is identical to clicking a preset card.
Completes the web-builder half of the prompt-to-stack task (the CLI 'recommend'
command shipped earlier). Verified: tsc --noEmit + oxlint + vite build + full
web test suite (270 pass) all green.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.