create-githat-app 1.8.11 → 1.8.13

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.
Files changed (26) hide show
  1. package/dist/cli.js +2 -2
  2. package/package.json +1 -1
  3. package/templates/agent/app/(auth)/forgot-password/page.tsx.hbs +2 -0
  4. package/templates/agent/app/(auth)/sign-in/page.tsx.hbs +2 -0
  5. package/templates/agent/app/(auth)/sign-up/page.tsx.hbs +2 -0
  6. package/templates/base/README.md.hbs +45 -0
  7. package/templates/classroom/app/(auth)/sign-in/page.tsx.hbs +2 -0
  8. package/templates/classroom/app/(auth)/sign-up/page.tsx.hbs +2 -0
  9. package/templates/content/app/(auth)/sign-in/page.tsx.hbs +2 -0
  10. package/templates/content/app/(auth)/sign-up/page.tsx.hbs +2 -0
  11. package/templates/dashboard/app/(auth)/sign-in/page.tsx.hbs +2 -0
  12. package/templates/dashboard/app/(auth)/sign-up/page.tsx.hbs +2 -0
  13. package/templates/fullstack/apps-web-nextjs/app/(auth)/forgot-password/page.tsx.hbs +2 -0
  14. package/templates/fullstack/apps-web-nextjs/app/(auth)/sign-in/page.tsx.hbs +2 -0
  15. package/templates/fullstack/apps-web-nextjs/app/(auth)/sign-up/page.tsx.hbs +2 -0
  16. package/templates/marketplace/app/(auth)/sign-in/page.tsx.hbs +2 -0
  17. package/templates/marketplace/app/(auth)/sign-up/page.tsx.hbs +2 -0
  18. package/templates/nextjs/app/(auth)/forgot-password/page.tsx.hbs +2 -0
  19. package/templates/nextjs/app/(auth)/sign-in/page.tsx.hbs +2 -0
  20. package/templates/nextjs/app/(auth)/sign-up/page.tsx.hbs +2 -0
  21. package/templates/plain/app/(auth)/sign-in/page.tsx.hbs +2 -0
  22. package/templates/plain/app/(auth)/sign-up/page.tsx.hbs +2 -0
  23. package/templates/portfolio/app/(auth)/sign-in/page.tsx.hbs +2 -0
  24. package/templates/portfolio/app/(auth)/sign-up/page.tsx.hbs +2 -0
  25. package/templates/saas/app/(auth)/sign-in/page.tsx.hbs +2 -0
  26. package/templates/saas/app/(auth)/sign-up/page.tsx.hbs +2 -0
package/dist/cli.js CHANGED
@@ -21,7 +21,7 @@ var DEPS = {
21
21
  next: "^16.0.0",
22
22
  react: "^19.0.0",
23
23
  "react-dom": "^19.0.0",
24
- "@githat/nextjs": "^0.13.8",
24
+ "@githat/nextjs": "^0.13.9",
25
25
  "@githat/ui": "^1.0.0"
26
26
  },
27
27
  devDependencies: {
@@ -36,7 +36,7 @@ var DEPS = {
36
36
  react: "^19.0.0",
37
37
  "react-dom": "^19.0.0",
38
38
  "react-router-dom": "^7.0.0",
39
- "@githat/nextjs": "^0.13.8",
39
+ "@githat/nextjs": "^0.13.9",
40
40
  "@githat/ui": "^1.0.0"
41
41
  },
42
42
  devDependencies: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-githat-app",
3
- "version": "1.8.11",
3
+ "version": "1.8.13",
4
4
  "description": "GitHat CLI — scaffold apps and manage the skills marketplace",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,6 +1,8 @@
1
1
  {{#if includeForgotPassword}}
2
2
  import { ForgotPasswordForm } from '@githat/nextjs';
3
3
 
4
+ export const metadata = { title: 'Reset password — {{businessName}}' };
5
+
4
6
  export default function ForgotPasswordPage() {
5
7
  return (
6
8
  <main {{#if useTailwind}}className="flex items-center justify-center min-h-screen"{{else}}style=\{{ display: 'flex', alignItems: 'center', justifyContent: 'center', minHeight: '100vh', background: 'var(--bg)' }}{{/if}}>
@@ -1,5 +1,7 @@
1
1
  import { SignInForm } from '@githat/nextjs';
2
2
 
3
+ export const metadata = { title: 'Sign in — {{businessName}}' };
4
+
3
5
  export default function SignInPage() {
4
6
  return (
5
7
  <main {{#if useTailwind}}className="flex items-center justify-center min-h-screen bg-[#09090b]"{{else}}style=\{{ display: 'flex', alignItems: 'center', justifyContent: 'center', minHeight: '100vh', background: '#09090b' }}{{/if}}>
@@ -1,5 +1,7 @@
1
1
  import { SignUpForm } from '@githat/nextjs';
2
2
 
3
+ export const metadata = { title: 'Sign up — {{businessName}}' };
4
+
3
5
  export default function SignUpPage() {
4
6
  return (
5
7
  <main {{#if useTailwind}}className="flex items-center justify-center min-h-screen bg-[#09090b]"{{else}}style=\{{ display: 'flex', alignItems: 'center', justifyContent: 'center', minHeight: '100vh', background: '#09090b' }}{{/if}}>
@@ -361,6 +361,51 @@ const reg = await getRegistration(operationId);
361
361
  Registration is handled through AWS Route 53 Domains (backed by ICANN-accredited
362
362
  registrars). WHOIS privacy protection is enabled by default.
363
363
 
364
+ ## Built-in analytics
365
+
366
+ Every GitHat app ships with a read-side analytics API. Surface it in your admin
367
+ pages using the `useAnalytics()` hook — no additional setup required:
368
+
369
+ ```{{#if typescript}}tsx{{else}}jsx{{/if}}
370
+ import { useAnalytics } from '@githat/nextjs';
371
+
372
+ const { getOverview, getTimeSeries, getTopUsers, getFunnels } = useAnalytics(appId);
373
+
374
+ // Last-30-days KPIs
375
+ const { signups, signins, apiCalls, storageMb } = await getOverview();
376
+
377
+ // Day-by-day sign-in trend
378
+ const { points } = await getTimeSeries({ metric: 'signins', granularity: 'day' });
379
+
380
+ // Top users by activity
381
+ const { users } = await getTopUsers({ metric: 'signins', limit: 10 });
382
+
383
+ // Conversion funnel: visitor → signup → email_verified → first_signin → mfa_enabled
384
+ const { funnel } = await getFunnels();
385
+ ```
386
+
387
+ Drop in the ready-made dashboard component (KPI cards + SVG chart + funnel + top-users
388
+ table — zero external chart dependencies):
389
+
390
+ ```{{#if typescript}}tsx{{else}}jsx{{/if}}
391
+ import { AnalyticsDashboard } from '@githat/nextjs';
392
+
393
+ <AnalyticsDashboard appId={appId} />
394
+ ```
395
+
396
+ For org-wide KPIs (number of apps, total API calls, billing tier):
397
+
398
+ ```{{#if typescript}}tsx{{else}}jsx{{/if}}
399
+ import { useOrgAnalytics } from '@githat/nextjs';
400
+
401
+ const { getOverview } = useOrgAnalytics(org.id);
402
+ const { numApps, activeUsers, billingTier } = await getOverview();
403
+ ```
404
+
405
+ Analytics endpoints live under `/analytics/*` and require an authenticated
406
+ org-admin JWT. They are read-only and cache the overview for 60 seconds
407
+ in Lambda memory — free-tier-safe with no extra infrastructure.
408
+
364
409
  ## Learn More
365
410
 
366
411
  - [GitHat Documentation](https://githat.io/docs)
@@ -1,5 +1,7 @@
1
1
  import { SignInForm } from '@githat/nextjs';
2
2
 
3
+ export const metadata = { title: 'Sign in — {{businessName}}' };
4
+
3
5
  export default function SignInPage() {
4
6
  return (
5
7
  <main {{#if useTailwind}}className="flex items-center justify-center min-h-screen bg-[#09090b]"{{else}}style=\{{ display: 'flex', alignItems: 'center', justifyContent: 'center', minHeight: '100vh', background: '#09090b' }}{{/if}}>
@@ -1,5 +1,7 @@
1
1
  import { SignUpForm } from '@githat/nextjs';
2
2
 
3
+ export const metadata = { title: 'Sign up — {{businessName}}' };
4
+
3
5
  export default function SignUpPage() {
4
6
  return (
5
7
  <main {{#if useTailwind}}className="flex items-center justify-center min-h-screen bg-[#09090b]"{{else}}style=\{{ display: 'flex', alignItems: 'center', justifyContent: 'center', minHeight: '100vh', background: '#09090b' }}{{/if}}>
@@ -1,5 +1,7 @@
1
1
  import { SignInForm } from '@githat/nextjs';
2
2
 
3
+ export const metadata = { title: 'Sign in — {{businessName}}' };
4
+
3
5
  export default function SignInPage() {
4
6
  return (
5
7
  <main {{#if useTailwind}}className="flex items-center justify-center min-h-screen bg-[#09090b]"{{else}}style=\{{ display: 'flex', alignItems: 'center', justifyContent: 'center', minHeight: '100vh', background: '#09090b' }}{{/if}}>
@@ -1,5 +1,7 @@
1
1
  import { SignUpForm } from '@githat/nextjs';
2
2
 
3
+ export const metadata = { title: 'Sign up — {{businessName}}' };
4
+
3
5
  export default function SignUpPage() {
4
6
  return (
5
7
  <main {{#if useTailwind}}className="flex items-center justify-center min-h-screen bg-[#09090b]"{{else}}style=\{{ display: 'flex', alignItems: 'center', justifyContent: 'center', minHeight: '100vh', background: '#09090b' }}{{/if}}>
@@ -1,5 +1,7 @@
1
1
  import { SignInForm } from '@githat/nextjs';
2
2
 
3
+ export const metadata = { title: 'Sign in — {{businessName}}' };
4
+
3
5
  export default function SignInPage() {
4
6
  return (
5
7
  <main {{#if useTailwind}}className="flex items-center justify-center min-h-screen bg-[#09090b]"{{else}}style=\{{ display: 'flex', alignItems: 'center', justifyContent: 'center', minHeight: '100vh', background: '#09090b' }}{{/if}}>
@@ -1,5 +1,7 @@
1
1
  import { SignUpForm } from '@githat/nextjs';
2
2
 
3
+ export const metadata = { title: 'Sign up — {{businessName}}' };
4
+
3
5
  export default function SignUpPage() {
4
6
  return (
5
7
  <main {{#if useTailwind}}className="flex items-center justify-center min-h-screen bg-[#09090b]"{{else}}style=\{{ display: 'flex', alignItems: 'center', justifyContent: 'center', minHeight: '100vh', background: '#09090b' }}{{/if}}>
@@ -1,6 +1,8 @@
1
1
  {{#if includeForgotPassword}}
2
2
  import { ForgotPasswordForm } from '@githat/nextjs';
3
3
 
4
+ export const metadata = { title: 'Reset password — {{businessName}}' };
5
+
4
6
  export default function ForgotPasswordPage() {
5
7
  return (
6
8
  <main {{#if useTailwind}}className="flex items-center justify-center min-h-screen bg-[#09090b]"{{else}}style=\{{ display: 'flex', alignItems: 'center', justifyContent: 'center', minHeight: '100vh', background: '#09090b' }}{{/if}}>
@@ -1,5 +1,7 @@
1
1
  import { SignInForm } from '@githat/nextjs';
2
2
 
3
+ export const metadata = { title: 'Sign in — {{businessName}}' };
4
+
3
5
  export default function SignInPage() {
4
6
  return (
5
7
  <main {{#if useTailwind}}className="flex items-center justify-center min-h-screen bg-[#09090b]"{{else}}style=\{{ display: 'flex', alignItems: 'center', justifyContent: 'center', minHeight: '100vh', background: '#09090b' }}{{/if}}>
@@ -1,5 +1,7 @@
1
1
  import { SignUpForm } from '@githat/nextjs';
2
2
 
3
+ export const metadata = { title: 'Sign up — {{businessName}}' };
4
+
3
5
  export default function SignUpPage() {
4
6
  return (
5
7
  <main {{#if useTailwind}}className="flex items-center justify-center min-h-screen bg-[#09090b]"{{else}}style=\{{ display: 'flex', alignItems: 'center', justifyContent: 'center', minHeight: '100vh', background: '#09090b' }}{{/if}}>
@@ -1,5 +1,7 @@
1
1
  import { SignInForm } from '@githat/nextjs';
2
2
 
3
+ export const metadata = { title: 'Sign in — {{businessName}}' };
4
+
3
5
  export default function SignInPage() {
4
6
  return (
5
7
  <main {{#if useTailwind}}className="flex items-center justify-center min-h-screen bg-[#09090b]"{{else}}style=\{{ display: 'flex', alignItems: 'center', justifyContent: 'center', minHeight: '100vh', background: '#09090b' }}{{/if}}>
@@ -1,5 +1,7 @@
1
1
  import { SignUpForm } from '@githat/nextjs';
2
2
 
3
+ export const metadata = { title: 'Sign up — {{businessName}}' };
4
+
3
5
  export default function SignUpPage() {
4
6
  return (
5
7
  <main {{#if useTailwind}}className="flex items-center justify-center min-h-screen bg-[#09090b]"{{else}}style=\{{ display: 'flex', alignItems: 'center', justifyContent: 'center', minHeight: '100vh', background: '#09090b' }}{{/if}}>
@@ -1,6 +1,8 @@
1
1
  {{#if includeForgotPassword}}
2
2
  import { ForgotPasswordForm } from '@githat/nextjs';
3
3
 
4
+ export const metadata = { title: 'Reset password — {{businessName}}' };
5
+
4
6
  export default function ForgotPasswordPage() {
5
7
  return (
6
8
  <main {{#if useTailwind}}className="flex items-center justify-center min-h-screen bg-[#09090b]"{{else}}style=\{{ display: 'flex', alignItems: 'center', justifyContent: 'center', minHeight: '100vh', background: '#09090b' }}{{/if}}>
@@ -1,5 +1,7 @@
1
1
  import { SignInForm } from '@githat/nextjs';
2
2
 
3
+ export const metadata = { title: 'Sign in — {{businessName}}' };
4
+
3
5
  export default function SignInPage() {
4
6
  return (
5
7
  <main {{#if useTailwind}}className="flex items-center justify-center min-h-screen bg-[#09090b]"{{else}}style=\{{ display: 'flex', alignItems: 'center', justifyContent: 'center', minHeight: '100vh', background: '#09090b' }}{{/if}}>
@@ -1,5 +1,7 @@
1
1
  import { SignUpForm } from '@githat/nextjs';
2
2
 
3
+ export const metadata = { title: 'Sign up — {{businessName}}' };
4
+
3
5
  export default function SignUpPage() {
4
6
  return (
5
7
  <main {{#if useTailwind}}className="flex items-center justify-center min-h-screen bg-[#09090b]"{{else}}style=\{{ display: 'flex', alignItems: 'center', justifyContent: 'center', minHeight: '100vh', background: '#09090b' }}{{/if}}>
@@ -1,5 +1,7 @@
1
1
  import { SignInForm } from '@githat/nextjs';
2
2
 
3
+ export const metadata = { title: 'Sign in — {{businessName}}' };
4
+
3
5
  export default function SignInPage() {
4
6
  return (
5
7
  <main {{#if useTailwind}}className="flex items-center justify-center min-h-screen bg-[#09090b]"{{else}}style=\{{ display: 'flex', alignItems: 'center', justifyContent: 'center', minHeight: '100vh', background: '#09090b' }}{{/if}}>
@@ -1,5 +1,7 @@
1
1
  import { SignUpForm } from '@githat/nextjs';
2
2
 
3
+ export const metadata = { title: 'Sign up — {{businessName}}' };
4
+
3
5
  export default function SignUpPage() {
4
6
  return (
5
7
  <main {{#if useTailwind}}className="flex items-center justify-center min-h-screen bg-[#09090b]"{{else}}style=\{{ display: 'flex', alignItems: 'center', justifyContent: 'center', minHeight: '100vh', background: '#09090b' }}{{/if}}>
@@ -1,5 +1,7 @@
1
1
  import { SignInForm } from '@githat/nextjs';
2
2
 
3
+ export const metadata = { title: 'Sign in — {{businessName}}' };
4
+
3
5
  export default function SignInPage() {
4
6
  return (
5
7
  <main {{#if useTailwind}}className="flex items-center justify-center min-h-screen bg-[#09090b]"{{else}}style=\{{ display: 'flex', alignItems: 'center', justifyContent: 'center', minHeight: '100vh', background: '#09090b' }}{{/if}}>
@@ -1,5 +1,7 @@
1
1
  import { SignUpForm } from '@githat/nextjs';
2
2
 
3
+ export const metadata = { title: 'Sign up — {{businessName}}' };
4
+
3
5
  export default function SignUpPage() {
4
6
  return (
5
7
  <main {{#if useTailwind}}className="flex items-center justify-center min-h-screen bg-[#09090b]"{{else}}style=\{{ display: 'flex', alignItems: 'center', justifyContent: 'center', minHeight: '100vh', background: '#09090b' }}{{/if}}>
@@ -1,5 +1,7 @@
1
1
  import { SignInForm } from '@githat/nextjs';
2
2
 
3
+ export const metadata = { title: 'Sign in — {{businessName}}' };
4
+
3
5
  export default function SignInPage() {
4
6
  return (
5
7
  <main {{#if useTailwind}}className="flex items-center justify-center min-h-screen bg-[#09090b]"{{else}}style=\{{ display: 'flex', alignItems: 'center', justifyContent: 'center', minHeight: '100vh', background: '#09090b' }}{{/if}}>
@@ -1,5 +1,7 @@
1
1
  import { SignUpForm } from '@githat/nextjs';
2
2
 
3
+ export const metadata = { title: 'Sign up — {{businessName}}' };
4
+
3
5
  export default function SignUpPage() {
4
6
  return (
5
7
  <main {{#if useTailwind}}className="flex items-center justify-center min-h-screen bg-[#09090b]"{{else}}style=\{{ display: 'flex', alignItems: 'center', justifyContent: 'center', minHeight: '100vh', background: '#09090b' }}{{/if}}>