Skip to content

Development#292

Open
Marve10s wants to merge 32 commits into
mainfrom
Development
Open

Development#292
Marve10s wants to merge 32 commits into
mainfrom
Development

Conversation

@Marve10s

@Marve10s Marve10s commented Jul 4, 2026

Copy link
Copy Markdown
Owner

No description provided.

Marve10s and others added 22 commits July 1, 2026 22:58
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
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.
@vercel

vercel Bot commented Jul 4, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
better-fullstack-web Ready Ready Preview, Comment Jul 5, 2026 2:20pm

@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL 1,000+ effective changed lines (test files excluded in mixed PRs). labels Jul 4, 2026
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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL 1,000+ effective changed lines (test files excluded in mixed PRs). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants