@donotdev/cli 0.0.14 → 0.0.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dependencies-matrix.json +372 -88
- package/dist/bin/commands/agent-setup.js +7 -1
- package/dist/bin/commands/build.js +141 -44
- package/dist/bin/commands/bump.js +81 -41
- package/dist/bin/commands/cacheout.js +37 -9
- package/dist/bin/commands/create-app.js +276 -121
- package/dist/bin/commands/create-project.js +506 -217
- package/dist/bin/commands/deploy.js +1785 -694
- package/dist/bin/commands/dev.js +177 -43
- package/dist/bin/commands/doctor.d.ts +6 -0
- package/dist/bin/commands/doctor.d.ts.map +1 -0
- package/dist/bin/commands/{lint.js → doctor.js} +1215 -156
- package/dist/bin/commands/doctor.js.map +1 -0
- package/dist/bin/commands/emu.js +451 -104
- package/dist/bin/commands/format.js +37 -9
- package/dist/bin/commands/make-admin.js +77499 -11
- package/dist/bin/commands/preview.js +181 -43
- package/dist/bin/commands/setup.d.ts +6 -0
- package/dist/bin/commands/setup.d.ts.map +1 -0
- package/dist/bin/commands/setup.js +11733 -0
- package/dist/bin/commands/setup.js.map +1 -0
- package/dist/bin/commands/supabase-setup.d.ts +6 -0
- package/dist/bin/commands/supabase-setup.d.ts.map +1 -0
- package/dist/bin/commands/supabase-setup.js +7 -0
- package/dist/bin/commands/supabase-setup.js.map +1 -0
- package/dist/bin/commands/sync-secrets.js +211 -34
- package/dist/bin/commands/type-check.d.ts +14 -0
- package/dist/bin/commands/type-check.d.ts.map +1 -0
- package/dist/bin/commands/type-check.js +2049 -0
- package/dist/bin/commands/type-check.js.map +1 -0
- package/dist/bin/commands/wai.js +3 -1
- package/dist/bin/dndev.js +73 -52
- package/dist/bin/donotdev.js +54 -45
- package/dist/index.js +4212 -3050
- package/package.json +3 -3
- package/templates/app-demo/src/App.tsx.example +1 -0
- package/templates/app-demo/src/pages/FullPage.tsx.example +2 -2
- package/templates/app-demo/src/pages/components/DemoLayout.tsx.example +2 -2
- package/templates/app-demo/src/themes.css.example +5 -12
- package/templates/app-expo/.env.example +44 -0
- package/templates/app-expo/.expo/README.md.example +5 -0
- package/templates/app-expo/.gitignore.example +36 -0
- package/templates/app-expo/README.md.example +58 -0
- package/templates/app-expo/app/.gitkeep +2 -0
- package/templates/app-expo/app/_layout.tsx.example +41 -0
- package/templates/app-expo/app/form.tsx.example +52 -0
- package/templates/app-expo/app/index.tsx.example +89 -0
- package/templates/app-expo/app/list.tsx.example +32 -0
- package/templates/app-expo/app/profile.tsx.example +76 -0
- package/templates/app-expo/app/signin.tsx.example +53 -0
- package/templates/app-expo/app.json.example +39 -0
- package/templates/app-expo/assets/adaptive-icon.png +0 -0
- package/templates/app-expo/assets/favicon.png +0 -0
- package/templates/app-expo/assets/icon.png +0 -0
- package/templates/app-expo/assets/splash.png +0 -0
- package/templates/app-expo/babel.config.js.example +10 -0
- package/templates/app-expo/eas.json.example +20 -0
- package/templates/app-expo/expo-env.d.ts.example +4 -0
- package/templates/app-expo/metro.config.js.example +20 -0
- package/templates/app-expo/service-account-key.json.example +12 -0
- package/templates/app-expo/src/config/app.ts.example +46 -0
- package/templates/app-expo/src/config/providers.ts.example +7 -0
- package/templates/app-expo/tsconfig.json.example +19 -0
- package/templates/app-next/.env.example +4 -33
- package/templates/app-next/src/app/ClientLayout.tsx.example +2 -0
- package/templates/app-next/src/app/layout.tsx.example +7 -6
- package/templates/app-next/src/config/providers.ts.example +7 -0
- package/templates/app-next/src/globals.css.example +2 -11
- package/templates/app-next/src/pages/HomePage.tsx.example +1 -1
- package/templates/app-next/src/themes.css.example +10 -13
- package/templates/app-vite/.env.example +3 -32
- package/templates/app-vite/index.html.example +2 -24
- package/templates/app-vite/src/App.tsx.example +2 -0
- package/templates/app-vite/src/config/providers.ts.example +7 -0
- package/templates/app-vite/src/globals.css.example +2 -12
- package/templates/app-vite/src/pages/FormPageExample.tsx.example +1 -2
- package/templates/app-vite/src/pages/HomePage.tsx.example +2 -2
- package/templates/app-vite/src/themes.css.example +109 -79
- package/templates/app-vite/vercel.json.example +11 -0
- package/templates/functions-firebase/README.md.example +1 -1
- package/templates/functions-firebase/build.mjs.example +2 -72
- package/templates/functions-firebase/functions-firebase/.env.example.example +24 -26
- package/templates/functions-firebase/functions-firebase/README.md.example +1 -1
- package/templates/functions-firebase/functions-firebase/build.mjs.example +2 -72
- package/templates/functions-firebase/functions-firebase/tsconfig.json.example +1 -1
- package/templates/functions-firebase/functions.config.js.example +1 -1
- package/templates/functions-supabase/supabase/config.toml.example +59 -0
- package/templates/functions-supabase/supabase/functions/.env.example +13 -0
- package/templates/functions-supabase/supabase/functions/cancel-subscription/index.ts.example +7 -0
- package/templates/functions-supabase/supabase/functions/change-plan/index.ts.example +11 -0
- package/templates/functions-supabase/supabase/functions/create-checkout-session/index.ts.example +11 -0
- package/templates/functions-supabase/supabase/functions/create-customer-portal/index.ts.example +7 -0
- package/templates/functions-supabase/supabase/functions/crud/index.ts.example +16 -0
- package/templates/functions-supabase/supabase/functions/delete-account/index.ts.example +7 -0
- package/templates/functions-supabase/supabase/functions/deno.json.example +8 -0
- package/templates/functions-supabase/supabase/functions/get-custom-claims/index.ts.example +7 -0
- package/templates/functions-supabase/supabase/functions/get-user-auth-status/index.ts.example +7 -0
- package/templates/functions-supabase/supabase/functions/refresh-subscription-status/index.ts.example +7 -0
- package/templates/functions-supabase/supabase/functions/remove-custom-claims/index.ts.example +7 -0
- package/templates/functions-supabase/supabase/functions/set-custom-claims/index.ts.example +7 -0
- package/templates/functions-supabase/supabase/migrations/20250101000000_idempotency.sql +24 -0
- package/templates/functions-supabase/supabase/migrations/20250101000001_rate_limits.sql +22 -0
- package/templates/functions-supabase/supabase/migrations/20250101000002_cleanup_jobs.sql +28 -0
- package/templates/functions-supabase/supabase/migrations/20250101000003_operation_metrics.sql +28 -0
- package/templates/functions-vercel/functions-vercel/tsconfig.json.example +1 -1
- package/templates/functions-vercel/functions-vercel/vercel.json.example +1 -1
- package/templates/functions-vercel/vercel.json.example +1 -1
- package/templates/github/github/workflows/firebase-deploy.yml.example +1 -1
- package/templates/github/workflows/firebase-deploy.yml.example +1 -1
- package/templates/overlay-firebase/env.fragment.example +34 -0
- package/templates/overlay-firebase/env.fragment.expo.example +34 -0
- package/templates/overlay-firebase/env.fragment.nextjs.example +34 -0
- package/templates/overlay-firebase/src/config/providers.expo.ts.example +49 -0
- package/templates/overlay-firebase/src/config/providers.ts.example +23 -0
- package/templates/overlay-supabase/env.fragment.example +12 -0
- package/templates/overlay-supabase/env.fragment.expo.example +12 -0
- package/templates/overlay-supabase/env.fragment.nextjs.example +12 -0
- package/templates/overlay-supabase/src/config/providers.expo.ts.example +35 -0
- package/templates/overlay-supabase/src/config/providers.ts.example +33 -0
- package/templates/overlay-supabase/vercel.headers.example +23 -0
- package/templates/overlay-supabase/vercel.json.example +22 -0
- package/templates/overlay-vercel/env.fragment.example +34 -0
- package/templates/overlay-vercel/env.fragment.nextjs.example +34 -0
- package/templates/overlay-vercel/src/config/providers.ts.example +24 -0
- package/templates/root-consumer/.claude/agents/architect.md.example +2 -310
- package/templates/root-consumer/.claude/agents/builder.md.example +2 -326
- package/templates/root-consumer/.claude/agents/coder.md.example +2 -83
- package/templates/root-consumer/.claude/agents/extractor.md.example +2 -231
- package/templates/root-consumer/.claude/agents/polisher.md.example +2 -132
- package/templates/root-consumer/.claude/agents/prompt-engineer.md.example +2 -81
- package/templates/root-consumer/.claude/commands/grill.md.example +30 -0
- package/templates/root-consumer/.claude/commands/techdebt.md.example +28 -0
- package/templates/root-consumer/.clinerules.example +1 -0
- package/templates/root-consumer/.cursor/rules/no-docs.mdc.example +15 -0
- package/templates/root-consumer/.cursorrules.example +1 -0
- package/templates/root-consumer/.github/copilot-instructions.md.example +1 -0
- package/templates/root-consumer/.windsurfrules.example +1 -0
- package/templates/root-consumer/AI.md.example +44 -123
- package/templates/root-consumer/CLAUDE.md.example +1 -134
- package/templates/root-consumer/CONVENTIONS.md.example +1 -0
- package/templates/root-consumer/GEMINI.md.example +1 -0
- package/templates/root-consumer/firebase.json.example +1 -1
- package/templates/root-consumer/guides/dndev/AGENT_START_HERE.md.example +22 -2
- package/templates/root-consumer/guides/dndev/COMPONENTS_ADV.md.example +0 -18
- package/templates/root-consumer/guides/dndev/COMPONENTS_UI.md.example +1 -1
- package/templates/root-consumer/guides/dndev/ENV_SETUP.md.example +101 -32
- package/templates/root-consumer/guides/dndev/INDEX.md.example +4 -2
- package/templates/root-consumer/guides/dndev/SETUP_APP_CONFIG.md.example +3 -3
- package/templates/root-consumer/guides/dndev/SETUP_CRUD.md.example +241 -12
- package/templates/root-consumer/guides/dndev/SETUP_FIREBASE.md.example +13 -7
- package/templates/root-consumer/guides/dndev/SETUP_OAUTH_PROVIDERS.md.example +60 -0
- package/templates/root-consumer/guides/dndev/SETUP_SOC2.md.example +234 -0
- package/templates/root-consumer/guides/dndev/SETUP_STRIPE.md.example +62 -0
- package/templates/root-consumer/guides/dndev/SETUP_SUPABASE.md.example +124 -0
- package/templates/root-consumer/guides/dndev/SETUP_THEMES.md.example +6 -2
- package/templates/root-consumer/guides/dndev/SETUP_VERCEL.md.example +176 -0
- package/templates/root-consumer/guides/dndev/USE_ROUTING.md.example +5 -9
- package/templates/root-consumer/guides/dndev/essences_reference.css.example +174 -0
- package/templates/root-consumer/guides/wai-way/WAI_WAY_CLI.md.example +7 -8
- package/templates/root-consumer/guides/wai-way/agents/builder.md.example +10 -0
- package/templates/root-consumer/guides/wai-way/agents/extractor.md.example +25 -5
- package/templates/root-consumer/guides/wai-way/agents/polisher.md.example +13 -2
- package/templates/root-consumer/guides/wai-way/blueprints/0_brainstorm.md.example +2 -2
- package/templates/root-consumer/guides/wai-way/blueprints/1_scaffold.md.example +55 -15
- package/templates/root-consumer/guides/wai-way/blueprints/3_compose.md.example +15 -4
- package/templates/root-consumer/guides/wai-way/spec_template.md.example +7 -6
- package/dist/bin/commands/lint.d.ts +0 -11
- package/dist/bin/commands/lint.d.ts.map +0 -1
- package/dist/bin/commands/lint.js.map +0 -1
- package/dist/bin/commands/staging.d.ts +0 -11
- package/dist/bin/commands/staging.d.ts.map +0 -1
- package/dist/bin/commands/staging.js +0 -12
- package/dist/bin/commands/staging.js.map +0 -1
- package/templates/app-payload/.env.example +0 -28
- package/templates/app-payload/README.md.example +0 -233
- package/templates/app-payload/collections/Company.ts.example +0 -125
- package/templates/app-payload/collections/Hero.ts.example +0 -62
- package/templates/app-payload/collections/Media.ts.example +0 -41
- package/templates/app-payload/collections/Products.ts.example +0 -115
- package/templates/app-payload/collections/Services.ts.example +0 -104
- package/templates/app-payload/collections/Testimonials.ts.example +0 -92
- package/templates/app-payload/collections/Users.ts.example +0 -35
- package/templates/app-payload/src/server.ts.example +0 -79
- package/templates/app-payload/tsconfig.json.example +0 -24
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// Learn more https://docs.expo.dev/guides/customizing-metro
|
|
2
|
+
const { getDefaultConfig } = require('expo/metro-config');
|
|
3
|
+
const path = require('path');
|
|
4
|
+
|
|
5
|
+
const projectRoot = __dirname;
|
|
6
|
+
const workspaceRoot = path.resolve(projectRoot, '../..');
|
|
7
|
+
|
|
8
|
+
/** @type {import('expo/metro-config').MetroConfig} */
|
|
9
|
+
const config = getDefaultConfig(projectRoot);
|
|
10
|
+
|
|
11
|
+
// Watch workspace packages (not the entire root — avoids churning on unrelated changes)
|
|
12
|
+
config.watchFolders = [path.resolve(workspaceRoot, 'packages')];
|
|
13
|
+
|
|
14
|
+
// Let Metro resolve from both the app's own node_modules and the workspace root
|
|
15
|
+
config.resolver.nodeModulesDirs = [
|
|
16
|
+
path.resolve(projectRoot, 'node_modules'),
|
|
17
|
+
path.resolve(workspaceRoot, 'node_modules'),
|
|
18
|
+
];
|
|
19
|
+
|
|
20
|
+
module.exports = config;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"type": "service_account",
|
|
3
|
+
"project_id": "{{YOUR_FIREBASE_PROJECT_ID}}",
|
|
4
|
+
"private_key_id": "your_private_key_id",
|
|
5
|
+
"private_key": "-----BEGIN PRIVATE KEY-----\nYour private key here\n-----END PRIVATE KEY-----\n",
|
|
6
|
+
"client_email": "firebase-adminsdk-xxxxx@{{YOUR_FIREBASE_PROJECT_ID}}.iam.gserviceaccount.com",
|
|
7
|
+
"client_id": "your_client_id",
|
|
8
|
+
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
|
|
9
|
+
"token_uri": "https://oauth2.googleapis.com/token",
|
|
10
|
+
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
|
|
11
|
+
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-xxxxx%40{{YOUR_FIREBASE_PROJECT_ID}}.iam.gserviceaccount.com"
|
|
12
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Application Configuration (Expo)
|
|
3
|
+
*
|
|
4
|
+
* THIS FILE IS YOUR MAIN CONFIGURATION. Update the values below.
|
|
5
|
+
*
|
|
6
|
+
* QUICK START:
|
|
7
|
+
* 1. Set APP_NAME and APP_SHORT_NAME
|
|
8
|
+
* 2. Run `bun dev` - everything else is automatic
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import type { AppConfig } from '@donotdev/core';
|
|
12
|
+
|
|
13
|
+
// ============================================================================
|
|
14
|
+
// APP IDENTITY - Update these values
|
|
15
|
+
// ============================================================================
|
|
16
|
+
|
|
17
|
+
export const APP_NAME = '{{appName}}';
|
|
18
|
+
export const APP_SHORT_NAME = '{{appShortName}}';
|
|
19
|
+
export const APP_DESCRIPTION = 'Built with DoNotDev Framework';
|
|
20
|
+
|
|
21
|
+
// ============================================================================
|
|
22
|
+
// MAIN CONFIGURATION
|
|
23
|
+
// ============================================================================
|
|
24
|
+
|
|
25
|
+
export const appConfig: AppConfig = {
|
|
26
|
+
app: {
|
|
27
|
+
name: APP_NAME,
|
|
28
|
+
shortName: APP_SHORT_NAME,
|
|
29
|
+
description: APP_DESCRIPTION,
|
|
30
|
+
},
|
|
31
|
+
|
|
32
|
+
// ==========================================================================
|
|
33
|
+
// FEATURES - Uncomment to enable
|
|
34
|
+
// ==========================================================================
|
|
35
|
+
features: {
|
|
36
|
+
// debug: true, // Enable debug tools in development
|
|
37
|
+
},
|
|
38
|
+
|
|
39
|
+
// ==========================================================================
|
|
40
|
+
// AUTH CONFIG - Uncomment to customize
|
|
41
|
+
// ==========================================================================
|
|
42
|
+
// auth: {
|
|
43
|
+
// authRoute: '/signin',
|
|
44
|
+
// profilePath: '/profile',
|
|
45
|
+
// },
|
|
46
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// src/config/providers.ts — Provider bootstrap
|
|
2
|
+
// Auto-generated by DoNotDev scaffolding. Edit freely.
|
|
3
|
+
// When you add a backend (Firebase, Supabase), replace this file with the appropriate provider setup.
|
|
4
|
+
// See: guides/dndev/SETUP_PROVIDERS.md
|
|
5
|
+
|
|
6
|
+
// No backend configured — nothing to register.
|
|
7
|
+
// To add a backend later, run: dndev create-app (in an existing project, it merges)
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"extends": "expo/tsconfig.base",
|
|
3
|
+
"compilerOptions": {
|
|
4
|
+
"strict": true,
|
|
5
|
+
"baseUrl": ".",
|
|
6
|
+
"paths": {
|
|
7
|
+
"@/*": ["./*"]
|
|
8
|
+
}
|
|
9
|
+
},
|
|
10
|
+
"include": [
|
|
11
|
+
"**/*.ts",
|
|
12
|
+
"**/*.tsx",
|
|
13
|
+
".expo/types/**/*.ts",
|
|
14
|
+
"expo-env.d.ts"
|
|
15
|
+
],
|
|
16
|
+
"exclude": [
|
|
17
|
+
"node_modules"
|
|
18
|
+
]
|
|
19
|
+
}
|
|
@@ -36,7 +36,7 @@ NEXT_PUBLIC_DONOTDEV_LICENSE_KEY=dndev_your_key_here
|
|
|
36
36
|
# =============================================================================
|
|
37
37
|
# Comma-separated list of enabled auth providers
|
|
38
38
|
# Available: github (required for framework), google, facebook, discord, twitter, microsoft, spotify, linkedin, reddit, twitch, yahoo, apple
|
|
39
|
-
# Uncomment when
|
|
39
|
+
# Uncomment when your backend is configured
|
|
40
40
|
# NEXT_PUBLIC_AUTH_PARTNERS=google,github
|
|
41
41
|
|
|
42
42
|
# Comma-separated list of enabled OAuth partners for API access
|
|
@@ -49,38 +49,9 @@ NEXT_PUBLIC_DONOTDEV_LICENSE_KEY=dndev_your_key_here
|
|
|
49
49
|
# NEXT_PUBLIC_SPOTIFY_CLIENT_ID=your_spotify_client_id
|
|
50
50
|
|
|
51
51
|
# =============================================================================
|
|
52
|
-
#
|
|
52
|
+
# Backend-specific vars are appended below by your backend choice
|
|
53
|
+
# (Firebase, Supabase, etc.) — see overlay templates
|
|
53
54
|
# =============================================================================
|
|
54
|
-
# Get these values from your Firebase project settings
|
|
55
|
-
# Run `dndev firebase:setup` to auto-populate, or copy from Firebase Console
|
|
56
|
-
NEXT_PUBLIC_FIREBASE_API_KEY=
|
|
57
|
-
NEXT_PUBLIC_FIREBASE_PROJECT_ID=
|
|
58
|
-
# Copy from Firebase Console. Framework uses APP_URL hostname in production automatically.
|
|
59
|
-
NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=
|
|
60
|
-
NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=
|
|
61
|
-
NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=
|
|
62
|
-
NEXT_PUBLIC_FIREBASE_APP_ID=
|
|
63
|
-
NEXT_PUBLIC_FIREBASE_MEASUREMENT_ID=
|
|
64
|
-
NEXT_PUBLIC_FIREBASE_FUNCTIONS_REGION=
|
|
65
|
-
|
|
66
|
-
# =============================================================================
|
|
67
|
-
# Firebase Emulator (Development only)
|
|
68
|
-
# =============================================================================
|
|
69
|
-
# Set to true to use Firebase emulators instead of production services
|
|
70
|
-
NEXT_PUBLIC_USE_FIREBASE_EMULATOR=false
|
|
71
|
-
NEXT_PUBLIC_FIREBASE_EMULATOR_HOST=localhost
|
|
72
|
-
NEXT_PUBLIC_FIREBASE_EMULATOR_PORT=9099
|
|
73
|
-
NEXT_PUBLIC_FIREBASE_AUTH_EMULATOR_HOST=http://localhost:9099
|
|
74
|
-
NEXT_PUBLIC_FIREBASE_FIRESTORE_EMULATOR_HOST=localhost:8080
|
|
75
|
-
NEXT_PUBLIC_FIREBASE_FUNCTIONS_EMULATOR_PORT=5001
|
|
76
|
-
|
|
77
|
-
# =============================================================================
|
|
78
|
-
# Firebase App Check (Abuse Protection)
|
|
79
|
-
# =============================================================================
|
|
80
|
-
# reCAPTCHA v3 site key for App Check
|
|
81
|
-
# NEXT_PUBLIC_RECAPTCHA_SITE_KEY=6LcXXXX...
|
|
82
|
-
# Optional: Debug token for localhost testing
|
|
83
|
-
# NEXT_PUBLIC_APPCHECK_DEBUG_TOKEN=XXXX-XXXX-XXXX
|
|
84
55
|
|
|
85
56
|
# =============================================================================
|
|
86
57
|
# Stripe Configuration (if using billing)
|
|
@@ -91,4 +62,4 @@ NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=
|
|
|
91
62
|
# Sentry (optional - auto-enabled if SENTRY_DSN is set)
|
|
92
63
|
# =============================================================================
|
|
93
64
|
# Framework automatically initializes Sentry if this variable is set
|
|
94
|
-
NEXT_PUBLIC_SENTRY_DSN=
|
|
65
|
+
NEXT_PUBLIC_SENTRY_DSN=
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import type { Metadata } from 'next';
|
|
2
|
+
|
|
3
|
+
import { FontPreloadLinks } from '@donotdev/ui/next';
|
|
4
|
+
|
|
2
5
|
import '../globals.css';
|
|
3
6
|
import { ClientLayout } from './ClientLayout';
|
|
4
7
|
|
|
5
8
|
/**
|
|
6
|
-
* Framework fonts are loaded via CSS @font-face rules in dndev.css
|
|
7
|
-
*
|
|
8
|
-
* The framework CSS includes optimized @font-face declarations for Inter
|
|
9
|
-
* (default) and Roboto (optional) with proper unicode-range subsetting for performance.
|
|
10
|
-
* Fonts are copied from framework to public/fonts/ by AssetDiscovery during build.
|
|
9
|
+
* Framework fonts are loaded via CSS @font-face rules in dndev.css (bundled).
|
|
10
|
+
* Font preload links are injected at build time; FontPreloadLinks reads the manifest for SSR.
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
13
|
export const metadata: Metadata = {
|
|
@@ -17,7 +17,7 @@ export const metadata: Metadata = {
|
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
19
|
* Root layout for Next.js App Router
|
|
20
|
-
*
|
|
20
|
+
*
|
|
21
21
|
* Theme detection happens client-side via ClientLayout to avoid
|
|
22
22
|
* Next.js 16 + Turbopack race condition with async layouts.
|
|
23
23
|
* Brief FOUC possible on first load, but prevents build-manifest.json errors.
|
|
@@ -35,6 +35,7 @@ export default function RootLayout({
|
|
|
35
35
|
>
|
|
36
36
|
<head>
|
|
37
37
|
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
|
38
|
+
<FontPreloadLinks />
|
|
38
39
|
</head>
|
|
39
40
|
<body className="light">
|
|
40
41
|
<ClientLayout>{children}</ClientLayout>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// src/config/providers.ts — Provider bootstrap
|
|
2
|
+
// Auto-generated by DoNotDev scaffolding. Edit freely.
|
|
3
|
+
// When you add a backend (Firebase, Supabase), replace this file with the appropriate provider setup.
|
|
4
|
+
// See: guides/dndev/SETUP_PROVIDERS.md
|
|
5
|
+
|
|
6
|
+
// No backend configured — nothing to register.
|
|
7
|
+
// To add a backend later, run: dndev create-app (in an existing project, it merges)
|
|
@@ -4,15 +4,6 @@
|
|
|
4
4
|
@import './themes.css';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
|
-
* Font
|
|
8
|
-
*
|
|
9
|
-
* Framework defaults to Inter (defined in @donotdev/components/styles/variables.css).
|
|
10
|
-
* Fonts are loaded via CSS @font-face rules in @donotdev/ui/assets/fonts/fonts.css
|
|
11
|
-
* and copied to public/fonts/ by AssetDiscovery during build.
|
|
12
|
-
*
|
|
13
|
-
* To override, uncomment and customize:
|
|
14
|
-
* :root {
|
|
15
|
-
* --font-sans: 'YourFont', sans-serif;
|
|
16
|
-
* --font-family: var(--font-sans);
|
|
17
|
-
* }
|
|
7
|
+
* Font choices (--font-family, --font-sans, etc.) belong in themes.css.
|
|
8
|
+
* Fonts (Inter, Space Grotesk, Playfair, Roboto) are bundled via @donotdev/ui; no external fetch, no public/fonts required.
|
|
18
9
|
*/
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* src/themes.css — SSOT for essence and theme variables. Import in globals.css only.
|
|
3
|
+
* Default = SaaS (Inter). Optional .brutalist and .luxury do not apply until class is set on <html>.
|
|
4
|
+
*/
|
|
1
5
|
/* src/themes.css */
|
|
2
6
|
|
|
3
7
|
/* ===========================
|
|
4
8
|
APP-WIDE SETTINGS
|
|
5
|
-
Spacing, radius, shadows, animations - apply to all themes
|
|
6
9
|
=========================== */
|
|
7
10
|
:root {
|
|
8
11
|
/* Routing animations (fade | slide | none) */
|
|
@@ -115,17 +118,11 @@
|
|
|
115
118
|
}
|
|
116
119
|
|
|
117
120
|
/* ===========================
|
|
118
|
-
|
|
119
|
-
|
|
121
|
+
OPTIONAL ESSENCES (do not apply by default; set <html class="brutalist"> or class="luxury" to use)
|
|
122
|
+
See guides/dndev/essences_reference.css for full .brutalist and .luxury blocks.
|
|
120
123
|
=========================== */
|
|
121
124
|
|
|
122
|
-
/*
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
--theme-is-dark: 0;
|
|
127
|
-
--background: #your-color;
|
|
128
|
-
--foreground: #your-color;
|
|
129
|
-
...
|
|
130
|
-
}
|
|
131
|
-
*/
|
|
125
|
+
/* ===========================
|
|
126
|
+
CUSTOM THEMES
|
|
127
|
+
=========================== */
|
|
128
|
+
/* Example: .brand { --theme-icon: 'Zap'; --theme-label: 'Brand'; --theme-is-dark: 0; ... } */
|
|
@@ -21,7 +21,7 @@ VITE_DONOTDEV_LICENSE_KEY=dndev_your_key_here
|
|
|
21
21
|
# =============================================================================
|
|
22
22
|
# Comma-separated list of enabled auth providers
|
|
23
23
|
# Available: github (required for framework), google, facebook, discord, twitter, microsoft, spotify, linkedin, reddit, twitch, yahoo, apple
|
|
24
|
-
# Uncomment when
|
|
24
|
+
# Uncomment when your backend is configured
|
|
25
25
|
# VITE_AUTH_PARTNERS=github
|
|
26
26
|
|
|
27
27
|
# Comma-separated list of enabled OAuth partners for API access
|
|
@@ -34,38 +34,9 @@ VITE_DONOTDEV_LICENSE_KEY=dndev_your_key_here
|
|
|
34
34
|
# VITE_SPOTIFY_CLIENT_ID=your_spotify_client_id
|
|
35
35
|
|
|
36
36
|
# =============================================================================
|
|
37
|
-
#
|
|
37
|
+
# Backend-specific vars are appended below by your backend choice
|
|
38
|
+
# (Firebase, Supabase, etc.) — see overlay templates
|
|
38
39
|
# =============================================================================
|
|
39
|
-
# Get these values from your Firebase project settings
|
|
40
|
-
# Run `dndev firebase:setup` to auto-populate, or copy from Firebase Console
|
|
41
|
-
VITE_FIREBASE_API_KEY=
|
|
42
|
-
VITE_FIREBASE_PROJECT_ID=
|
|
43
|
-
# Copy from Firebase Console. Framework uses APP_URL hostname in production automatically.
|
|
44
|
-
VITE_FIREBASE_AUTH_DOMAIN=
|
|
45
|
-
VITE_FIREBASE_STORAGE_BUCKET=
|
|
46
|
-
VITE_FIREBASE_MESSAGING_SENDER_ID=
|
|
47
|
-
VITE_FIREBASE_APP_ID=
|
|
48
|
-
VITE_FIREBASE_MEASUREMENT_ID=
|
|
49
|
-
VITE_FIREBASE_FUNCTIONS_REGION=
|
|
50
|
-
|
|
51
|
-
# =============================================================================
|
|
52
|
-
# Firebase Emulator (Development only)
|
|
53
|
-
# =============================================================================
|
|
54
|
-
# Set to true to use Firebase emulators instead of production services
|
|
55
|
-
VITE_USE_FIREBASE_EMULATOR=false
|
|
56
|
-
VITE_FIREBASE_EMULATOR_HOST=localhost
|
|
57
|
-
VITE_FIREBASE_EMULATOR_PORT=9099
|
|
58
|
-
VITE_FIREBASE_AUTH_EMULATOR_HOST=http://localhost:9099
|
|
59
|
-
VITE_FIREBASE_FIRESTORE_EMULATOR_HOST=localhost:8080
|
|
60
|
-
VITE_FIREBASE_FUNCTIONS_EMULATOR_PORT=5001
|
|
61
|
-
|
|
62
|
-
# =============================================================================
|
|
63
|
-
# Firebase App Check (Abuse Protection)
|
|
64
|
-
# =============================================================================
|
|
65
|
-
# reCAPTCHA v3 site key for App Check
|
|
66
|
-
# VITE_RECAPTCHA_SITE_KEY=6LcXXXX...
|
|
67
|
-
# Optional: Debug token for localhost testing
|
|
68
|
-
# VITE_APPCHECK_DEBUG_TOKEN=XXXX-XXXX-XXXX
|
|
69
40
|
|
|
70
41
|
# =============================================================================
|
|
71
42
|
# Stripe Configuration (if using billing)
|
|
@@ -16,13 +16,8 @@
|
|
|
16
16
|
<!-- ✅ PWA: Manifest link (if exists) -->
|
|
17
17
|
<link rel="manifest" href="/manifest.json" />
|
|
18
18
|
|
|
19
|
-
<!--
|
|
20
|
-
|
|
21
|
-
<link rel="preload" href="/fonts/Roboto-400-latin.woff2" as="font" type="font/woff2" crossorigin="anonymous">
|
|
22
|
-
|
|
23
|
-
<!-- ✅ PERFORMANCE: Load extended font subsets async (non-blocking) -->
|
|
24
|
-
<link rel="stylesheet" href="/fonts/fonts.css" media="print" onload="this.media='all'">
|
|
25
|
-
<noscript><link rel="stylesheet" href="/fonts/fonts.css"></noscript>
|
|
19
|
+
<!-- Fonts: Inter, Space Grotesk, Playfair, Roboto loaded via @donotdev/ui/dndev.css (bundled). -->
|
|
20
|
+
<!-- DNDEV_FONT_PRELOADS -->
|
|
26
21
|
|
|
27
22
|
<!-- ✅ PERFORMANCE: Preconnect to external domains (OAuth providers) -->
|
|
28
23
|
<!-- GitHub OAuth -->
|
|
@@ -41,23 +36,6 @@
|
|
|
41
36
|
|
|
42
37
|
<!-- ✅ PERFORMANCE: Critical CSS inlined here by build -->
|
|
43
38
|
<style>
|
|
44
|
-
/* Critical @font-face declarations - must be inline for preloaded fonts to work */
|
|
45
|
-
@font-face {
|
|
46
|
-
font-family: Inter;
|
|
47
|
-
font-style: normal;
|
|
48
|
-
font-weight: 400 700;
|
|
49
|
-
font-display: swap;
|
|
50
|
-
src: url('/fonts/Inter-latin.woff2') format('woff2');
|
|
51
|
-
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
|
52
|
-
}
|
|
53
|
-
@font-face {
|
|
54
|
-
font-family: Roboto;
|
|
55
|
-
font-style: normal;
|
|
56
|
-
font-weight: 400;
|
|
57
|
-
font-display: swap;
|
|
58
|
-
src: url('/fonts/Roboto-400-latin.woff2') format('woff2');
|
|
59
|
-
unicode-range: U+0000-00FF;
|
|
60
|
-
}
|
|
61
39
|
/* Critical above-the-fold styles */
|
|
62
40
|
html, body {
|
|
63
41
|
margin: 0;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// src/config/providers.ts — Provider bootstrap
|
|
2
|
+
// Auto-generated by DoNotDev scaffolding. Edit freely.
|
|
3
|
+
// When you add a backend (Firebase, Supabase), replace this file with the appropriate provider setup.
|
|
4
|
+
// See: guides/dndev/SETUP_PROVIDERS.md
|
|
5
|
+
|
|
6
|
+
// No backend configured — nothing to register.
|
|
7
|
+
// To add a backend later, run: dndev create-app (in an existing project, it merges)
|
|
@@ -4,16 +4,6 @@
|
|
|
4
4
|
@import './themes.css';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
|
-
* Font
|
|
8
|
-
*
|
|
9
|
-
* Framework defaults to Inter (defined in @donotdev/components/styles/variables.css).
|
|
10
|
-
* Fonts are loaded via CSS @font-face rules in @donotdev/ui/assets/fonts/fonts.css
|
|
11
|
-
* and copied to public/fonts/ by AssetDiscovery during build.
|
|
12
|
-
*
|
|
13
|
-
* To override, uncomment and customize:
|
|
14
|
-
* :root {
|
|
15
|
-
* --font-sans: 'YourFont', sans-serif;
|
|
16
|
-
* --font-mono: 'YourMonoFont', monospace;
|
|
17
|
-
* --font-family: var(--font-sans);
|
|
18
|
-
* }
|
|
7
|
+
* Font choices (--font-family, --font-sans, etc.) belong in themes.css.
|
|
8
|
+
* Fonts (Inter, Space Grotesk, Playfair, Roboto) are bundled via @donotdev/ui; no external fetch, no public/fonts required.
|
|
19
9
|
*/
|
|
@@ -54,8 +54,7 @@ export default function ProductPage() {
|
|
|
54
54
|
const isNew = id === 'new';
|
|
55
55
|
|
|
56
56
|
// useCrud provides CRUD operations with optimistic updates
|
|
57
|
-
|
|
58
|
-
const { get, add, update, error } = useCrud(productEntity, { backend: 'functions' });
|
|
57
|
+
const { get, add, update, error } = useCrud(productEntity);
|
|
59
58
|
const [formData, setFormData] = useState<any>(null);
|
|
60
59
|
|
|
61
60
|
// ==========================================================================
|
|
@@ -53,7 +53,7 @@ export default function HomePage() {
|
|
|
53
53
|
<Card
|
|
54
54
|
title="2. Firebase Setup"
|
|
55
55
|
content={[
|
|
56
|
-
'Run: dndev firebase
|
|
56
|
+
'Run: dndev setup firebase',
|
|
57
57
|
'This will:',
|
|
58
58
|
' - Create or select a Firebase project',
|
|
59
59
|
' - Create a web app if needed',
|
|
@@ -176,7 +176,7 @@ export default function HomePage() {
|
|
|
176
176
|
{/* ================================================================ */}
|
|
177
177
|
|
|
178
178
|
<Section title="Start Building" tone="muted" align="center">
|
|
179
|
-
<Stack align="center"
|
|
179
|
+
<Stack align="center">
|
|
180
180
|
<Text level="body">
|
|
181
181
|
Once setup is complete, use WAI-WAY to build your app:
|
|
182
182
|
</Text>
|