@sansavision/create-pulse 0.4.3 → 0.4.5

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 (102) hide show
  1. package/README.md +1 -1
  2. package/dist/index.js +1 -1
  3. package/package.json +3 -3
  4. package/templates/aurora-auth-node-demo/README.md +43 -0
  5. package/templates/aurora-auth-node-demo/aurora.config.ts +15 -0
  6. package/templates/aurora-auth-node-demo/bun.lock +679 -0
  7. package/templates/aurora-auth-node-demo/drizzle.config.ts +9 -0
  8. package/templates/aurora-auth-node-demo/package.json +39 -0
  9. package/templates/aurora-auth-node-demo/postcss.config.mjs +7 -0
  10. package/templates/aurora-auth-node-demo/server.mjs +46 -0
  11. package/templates/aurora-auth-node-demo/src/actions/createMessage.action.server.ts +31 -0
  12. package/templates/aurora-auth-node-demo/src/aurora.auth.ts +65 -0
  13. package/templates/aurora-auth-node-demo/src/lib/auth-client.ts +30 -0
  14. package/templates/aurora-auth-node-demo/src/lib/auth.server.ts +11 -0
  15. package/templates/aurora-auth-node-demo/src/lib/auth.ts +30 -0
  16. package/templates/aurora-auth-node-demo/src/lib/db.ts +6 -0
  17. package/templates/aurora-auth-node-demo/src/lib/pulse.ts +45 -0
  18. package/templates/aurora-auth-node-demo/src/lib/schema.ts +107 -0
  19. package/templates/aurora-auth-node-demo/src/queries/listMessages.server.ts +25 -0
  20. package/templates/aurora-auth-node-demo/src/routes/api/auth/[...slug]/handler.ts +14 -0
  21. package/templates/aurora-auth-node-demo/src/routes/api/pulse/verify/handler.ts +55 -0
  22. package/templates/aurora-auth-node-demo/src/routes/auth/sign-in/page.client.tsx +132 -0
  23. package/templates/aurora-auth-node-demo/src/routes/auth/sign-in/page.tsx +5 -0
  24. package/templates/aurora-auth-node-demo/src/routes/auth/sign-up/page.client.tsx +154 -0
  25. package/templates/aurora-auth-node-demo/src/routes/auth/sign-up/page.tsx +5 -0
  26. package/templates/aurora-auth-node-demo/src/routes/dashboard/demos/arena-game/page.client.tsx +640 -0
  27. package/templates/aurora-auth-node-demo/src/routes/dashboard/demos/arena-game/page.tsx +5 -0
  28. package/templates/aurora-auth-node-demo/src/routes/dashboard/demos/chat/page.client.tsx +349 -0
  29. package/templates/aurora-auth-node-demo/src/routes/dashboard/demos/chat/page.tsx +5 -0
  30. package/templates/aurora-auth-node-demo/src/routes/dashboard/demos/encrypted-chat/page.client.tsx +472 -0
  31. package/templates/aurora-auth-node-demo/src/routes/dashboard/demos/encrypted-chat/page.tsx +5 -0
  32. package/templates/aurora-auth-node-demo/src/routes/dashboard/demos/game-sync/page.client.tsx +375 -0
  33. package/templates/aurora-auth-node-demo/src/routes/dashboard/demos/game-sync/page.tsx +5 -0
  34. package/templates/aurora-auth-node-demo/src/routes/dashboard/demos/queues/page.client.tsx +423 -0
  35. package/templates/aurora-auth-node-demo/src/routes/dashboard/demos/queues/page.tsx +5 -0
  36. package/templates/aurora-auth-node-demo/src/routes/dashboard/demos/video-call/page.client.tsx +840 -0
  37. package/templates/aurora-auth-node-demo/src/routes/dashboard/demos/video-call/page.tsx +5 -0
  38. package/templates/aurora-auth-node-demo/src/routes/dashboard/demos/watch-together/page.client.tsx +722 -0
  39. package/templates/aurora-auth-node-demo/src/routes/dashboard/demos/watch-together/page.tsx +5 -0
  40. package/templates/aurora-auth-node-demo/src/routes/dashboard/layout.client.tsx +113 -0
  41. package/templates/aurora-auth-node-demo/src/routes/dashboard/layout.tsx +5 -0
  42. package/templates/aurora-auth-node-demo/src/routes/dashboard/page.client.tsx +195 -0
  43. package/templates/aurora-auth-node-demo/src/routes/dashboard/page.tsx +5 -0
  44. package/templates/aurora-auth-node-demo/src/routes/favicon.ico +0 -0
  45. package/templates/aurora-auth-node-demo/src/routes/layout.tsx +18 -0
  46. package/templates/aurora-auth-node-demo/src/routes/page.client.tsx +263 -0
  47. package/templates/aurora-auth-node-demo/src/routes/page.tsx +5 -0
  48. package/templates/aurora-auth-node-demo/src/styles/app.css +96 -0
  49. package/templates/aurora-auth-node-demo/tsconfig.json +27 -0
  50. package/templates/aurora-auth-node-demo/tsconfig.tsbuildinfo +1 -0
  51. package/templates/nextjs-auth-demo/README.md +1 -1
  52. package/templates/nextjs-auth-demo/next-env.d.ts +1 -1
  53. package/templates/nextjs-auth-demo/package.json +8 -7
  54. package/templates/nextjs-auth-demo/src/app/dashboard/demos/arena-game/page.tsx +640 -0
  55. package/templates/nextjs-auth-demo/src/app/dashboard/demos/chat/page.tsx +124 -23
  56. package/templates/nextjs-auth-demo/src/app/dashboard/demos/encrypted-chat/page.tsx +350 -76
  57. package/templates/nextjs-auth-demo/src/app/dashboard/demos/game-sync/page.tsx +232 -49
  58. package/templates/nextjs-auth-demo/src/app/dashboard/demos/queues/page.tsx +213 -87
  59. package/templates/nextjs-auth-demo/src/app/dashboard/demos/video-call/page.tsx +840 -0
  60. package/templates/nextjs-auth-demo/src/app/dashboard/demos/watch-together/page.tsx +589 -123
  61. package/templates/nextjs-auth-demo/src/app/dashboard/layout.tsx +4 -0
  62. package/templates/nextjs-auth-demo/src/app/dashboard/page.tsx +53 -5
  63. package/templates/nextjs-auth-demo/src/app/layout.tsx +1 -1
  64. package/templates/nextjs-auth-node-demo/.env.example +10 -0
  65. package/templates/nextjs-auth-node-demo/Dockerfile +19 -0
  66. package/templates/nextjs-auth-node-demo/README.md +159 -0
  67. package/templates/nextjs-auth-node-demo/_gitignore +33 -0
  68. package/templates/nextjs-auth-node-demo/drizzle.config.ts +10 -0
  69. package/templates/nextjs-auth-node-demo/eslint.config.mjs +18 -0
  70. package/templates/nextjs-auth-node-demo/next-env.d.ts +6 -0
  71. package/templates/nextjs-auth-node-demo/next.config.ts +7 -0
  72. package/templates/nextjs-auth-node-demo/package.json +38 -0
  73. package/templates/nextjs-auth-node-demo/postcss.config.mjs +7 -0
  74. package/templates/nextjs-auth-node-demo/public/file.svg +1 -0
  75. package/templates/nextjs-auth-node-demo/public/globe.svg +1 -0
  76. package/templates/nextjs-auth-node-demo/public/next.svg +1 -0
  77. package/templates/nextjs-auth-node-demo/public/vercel.svg +1 -0
  78. package/templates/nextjs-auth-node-demo/public/window.svg +1 -0
  79. package/templates/nextjs-auth-node-demo/server.mjs +45 -0
  80. package/templates/nextjs-auth-node-demo/src/app/api/auth/[...all]/route.ts +4 -0
  81. package/templates/nextjs-auth-node-demo/src/app/api/pulse/verify/route.ts +54 -0
  82. package/templates/nextjs-auth-node-demo/src/app/auth/sign-in/page.tsx +131 -0
  83. package/templates/nextjs-auth-node-demo/src/app/auth/sign-up/page.tsx +153 -0
  84. package/templates/nextjs-auth-node-demo/src/app/dashboard/demos/arena-game/page.tsx +640 -0
  85. package/templates/nextjs-auth-node-demo/src/app/dashboard/demos/chat/page.tsx +349 -0
  86. package/templates/nextjs-auth-node-demo/src/app/dashboard/demos/encrypted-chat/page.tsx +472 -0
  87. package/templates/nextjs-auth-node-demo/src/app/dashboard/demos/game-sync/page.tsx +375 -0
  88. package/templates/nextjs-auth-node-demo/src/app/dashboard/demos/queues/page.tsx +423 -0
  89. package/templates/nextjs-auth-node-demo/src/app/dashboard/demos/video-call/page.tsx +840 -0
  90. package/templates/nextjs-auth-node-demo/src/app/dashboard/demos/watch-together/page.tsx +724 -0
  91. package/templates/nextjs-auth-node-demo/src/app/dashboard/layout.tsx +113 -0
  92. package/templates/nextjs-auth-node-demo/src/app/dashboard/page.tsx +195 -0
  93. package/templates/nextjs-auth-node-demo/src/app/favicon.ico +0 -0
  94. package/templates/nextjs-auth-node-demo/src/app/globals.css +96 -0
  95. package/templates/nextjs-auth-node-demo/src/app/layout.tsx +27 -0
  96. package/templates/nextjs-auth-node-demo/src/app/page.tsx +254 -0
  97. package/templates/nextjs-auth-node-demo/src/lib/auth-client.ts +15 -0
  98. package/templates/nextjs-auth-node-demo/src/lib/auth.ts +14 -0
  99. package/templates/nextjs-auth-node-demo/src/lib/db.ts +6 -0
  100. package/templates/nextjs-auth-node-demo/src/lib/pulse.ts +45 -0
  101. package/templates/nextjs-auth-node-demo/src/lib/schema.ts +107 -0
  102. package/templates/nextjs-auth-node-demo/tsconfig.json +34 -0
@@ -0,0 +1,154 @@
1
+
2
+
3
+ import { useState } from "react";
4
+ import { createClientNavigation } from "@sansavision/aurora/router";
5
+
6
+ import { signUp } from "@/lib/auth-client";
7
+ import { Zap, Mail, Lock, User, ArrowRight, Loader2 } from "lucide-react";
8
+
9
+ export default function SignUpPage() {
10
+ const router = createClientNavigation();
11
+ const [name, setName] = useState("");
12
+ const [email, setEmail] = useState("");
13
+ const [password, setPassword] = useState("");
14
+ const [error, setError] = useState("");
15
+ const [loading, setLoading] = useState(false);
16
+
17
+ async function handleSubmit(e: React.FormEvent) {
18
+ e.preventDefault();
19
+ setError("");
20
+ setLoading(true);
21
+
22
+ try {
23
+ const result = await signUp.email({
24
+ name,
25
+ email,
26
+ password,
27
+ });
28
+
29
+ if (result.error) {
30
+ setError(result.error.message || "Sign up failed");
31
+ } else {
32
+ router.navigate("/dashboard");
33
+ }
34
+ } catch {
35
+ setError("An unexpected error occurred");
36
+ } finally {
37
+ setLoading(false);
38
+ }
39
+ }
40
+
41
+ return (
42
+ <div className="min-h-screen flex items-center justify-center px-4 relative overflow-hidden">
43
+ <div className="absolute top-1/4 left-1/3 w-80 h-80 bg-purple-500/15 rounded-full blur-[100px]" />
44
+ <div className="absolute bottom-1/4 right-1/3 w-80 h-80 bg-cyan-500/15 rounded-full blur-[100px]" />
45
+
46
+ <div className="w-full max-w-md relative z-10">
47
+ <div className="text-center mb-8">
48
+ <a href="/" className="inline-flex items-center gap-2 mb-6">
49
+ <div className="w-10 h-10 rounded-xl bg-gradient-to-br from-purple-500 to-cyan-500 flex items-center justify-center">
50
+ <Zap className="w-6 h-6 text-white" />
51
+ </div>
52
+ <span className="text-2xl font-bold">Pulse</span>
53
+ </a>
54
+ <h1 className="text-2xl font-bold mb-2">Create your account</h1>
55
+ <p className="text-slate-400">
56
+ Start exploring the real-time protocol
57
+ </p>
58
+ </div>
59
+
60
+ <form
61
+ method="post"
62
+ onSubmit={handleSubmit}
63
+ className="glass rounded-2xl p-8 space-y-5"
64
+ >
65
+ {error && (
66
+ <div className="p-3 rounded-lg bg-red-500/10 border border-red-500/20 text-red-400 text-sm">
67
+ {error}
68
+ </div>
69
+ )}
70
+
71
+ <div>
72
+ <label className="block text-sm font-medium text-slate-300 mb-1.5">
73
+ Name
74
+ </label>
75
+ <div className="relative">
76
+ <User className="absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-slate-500" />
77
+ <input
78
+ type="text"
79
+ value={name}
80
+ onChange={(e) => setName(e.target.value)}
81
+ placeholder="Your name"
82
+ required
83
+ className="w-full pl-10 pr-4 py-2.5 rounded-lg bg-slate-800/50 border border-slate-700 focus:border-purple-500 focus:ring-1 focus:ring-purple-500 outline-none text-sm transition-colors placeholder:text-slate-600"
84
+ />
85
+ </div>
86
+ </div>
87
+
88
+ <div>
89
+ <label className="block text-sm font-medium text-slate-300 mb-1.5">
90
+ Email
91
+ </label>
92
+ <div className="relative">
93
+ <Mail className="absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-slate-500" />
94
+ <input
95
+ type="email"
96
+ value={email}
97
+ onChange={(e) => setEmail(e.target.value)}
98
+ placeholder="you@example.com"
99
+ required
100
+ className="w-full pl-10 pr-4 py-2.5 rounded-lg bg-slate-800/50 border border-slate-700 focus:border-purple-500 focus:ring-1 focus:ring-purple-500 outline-none text-sm transition-colors placeholder:text-slate-600"
101
+ />
102
+ </div>
103
+ </div>
104
+
105
+ <div>
106
+ <label className="block text-sm font-medium text-slate-300 mb-1.5">
107
+ Password
108
+ </label>
109
+ <div className="relative">
110
+ <Lock className="absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-slate-500" />
111
+ <input
112
+ type="password"
113
+ value={password}
114
+ onChange={(e) => setPassword(e.target.value)}
115
+ placeholder="••••••••"
116
+ required
117
+ minLength={8}
118
+ className="w-full pl-10 pr-4 py-2.5 rounded-lg bg-slate-800/50 border border-slate-700 focus:border-purple-500 focus:ring-1 focus:ring-purple-500 outline-none text-sm transition-colors placeholder:text-slate-600"
119
+ />
120
+ </div>
121
+ <p className="text-xs text-slate-500 mt-1">
122
+ Must be at least 8 characters
123
+ </p>
124
+ </div>
125
+
126
+ <button
127
+ type="submit"
128
+ disabled={loading}
129
+ className="w-full py-2.5 bg-gradient-to-r from-purple-600 to-cyan-600 hover:from-purple-500 hover:to-cyan-500 rounded-lg font-semibold transition-all hover:shadow-lg hover:shadow-purple-500/25 disabled:opacity-50 disabled:cursor-not-allowed flex items-center justify-center gap-2"
130
+ >
131
+ {loading ? (
132
+ <Loader2 className="w-4 h-4 animate-spin" />
133
+ ) : (
134
+ <>
135
+ Create Account
136
+ <ArrowRight className="w-4 h-4" />
137
+ </>
138
+ )}
139
+ </button>
140
+
141
+ <p className="text-center text-sm text-slate-400">
142
+ Already have an account?{" "}
143
+ <a
144
+ href="/auth/sign-in"
145
+ className="text-purple-400 hover:text-purple-300 font-medium"
146
+ >
147
+ Sign in
148
+ </a>
149
+ </p>
150
+ </form>
151
+ </div>
152
+ </div>
153
+ );
154
+ }
@@ -0,0 +1,5 @@
1
+ import SignUpPage from "./page.client";
2
+
3
+ export default function Page() {
4
+ return <SignUpPage />;
5
+ }