create-arktos 1.0.0

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.
@@ -0,0 +1,107 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Email Verification - {{appName}}</title>
7
+ <style>
8
+ body {
9
+ font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
10
+ line-height: 1.6;
11
+ color: #333;
12
+ background-color: #f4f4f4;
13
+ margin: 0;
14
+ padding: 0;
15
+ }
16
+ .container {
17
+ max-width: 600px;
18
+ margin: 20px auto;
19
+ background: white;
20
+ padding: 40px;
21
+ border-radius: 10px;
22
+ box-shadow: 0 0 20px rgba(0,0,0,0.1);
23
+ }
24
+ .header {
25
+ text-align: center;
26
+ margin-bottom: 30px;
27
+ }
28
+ .logo {
29
+ font-size: 24px;
30
+ font-weight: bold;
31
+ color: #4f46e5;
32
+ margin-bottom: 10px;
33
+ }
34
+ h1 {
35
+ color: #1f2937;
36
+ margin-bottom: 20px;
37
+ font-size: 24px;
38
+ }
39
+ .button {
40
+ display: inline-block;
41
+ padding: 12px 30px;
42
+ background-color: #4f46e5;
43
+ color: white;
44
+ text-decoration: none;
45
+ border-radius: 6px;
46
+ font-weight: bold;
47
+ margin: 20px 0;
48
+ transition: background-color 0.3s ease;
49
+ }
50
+ .button:hover {
51
+ background-color: #4338ca;
52
+ }
53
+ .footer {
54
+ margin-top: 40px;
55
+ text-align: center;
56
+ color: #6b7280;
57
+ font-size: 14px;
58
+ }
59
+ .footer a {
60
+ color: #4f46e5;
61
+ text-decoration: none;
62
+ }
63
+ .divider {
64
+ border-top: 1px solid #e5e7eb;
65
+ margin: 30px 0;
66
+ }
67
+ .security-note {
68
+ background-color: #fef3cd;
69
+ border-left: 4px solid #f59e0b;
70
+ padding: 15px;
71
+ margin: 20px 0;
72
+ font-size: 14px;
73
+ }
74
+ </style>
75
+ </head>
76
+ <body>
77
+ <div class="container">
78
+ <div class="header">
79
+ <div class="logo">{{appName}}</div>
80
+ </div>
81
+
82
+ <h1>Hi {{firstName}},</h1>
83
+
84
+ <p>Welcome to {{appName}}! We're excited to have you on board.</p>
85
+
86
+ <p>To complete your account setup and start using all our features, please verify your email address by clicking the button below:</p>
87
+
88
+ <div style="text-align: center;">
89
+ <a href="{{verificationUrl}}" class="button">Verify Email Address</a>
90
+ </div>
91
+
92
+ <div class="security-note">
93
+ <strong>Security Note:</strong> This verification link will expire in 24 hours for your security. If you didn't create an account with {{appName}}, you can safely ignore this email.
94
+ </div>
95
+
96
+ <p>If the button doesn't work, you can also copy and paste the following link into your browser:</p>
97
+ <p style="word-break: break-all; color: #4f46e5;">{{verificationUrl}}</p>
98
+
99
+ <div class="divider"></div>
100
+
101
+ <div class="footer">
102
+ <p>Need help? Contact our support team or visit our <a href="{{frontendUrl}}">help center</a>.</p>
103
+ <p>&copy; 2025 {{appName}}. All rights reserved.</p>
104
+ </div>
105
+ </div>
106
+ </body>
107
+ </html>
@@ -0,0 +1,113 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Welcome to {{appName}}</title>
7
+ <style>
8
+ body {
9
+ font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
10
+ line-height: 1.6;
11
+ color: #333;
12
+ background-color: #f4f4f4;
13
+ margin: 0;
14
+ padding: 0;
15
+ }
16
+ .container {
17
+ max-width: 600px;
18
+ margin: 20px auto;
19
+ background: white;
20
+ padding: 40px;
21
+ border-radius: 10px;
22
+ box-shadow: 0 0 20px rgba(0,0,0,0.1);
23
+ }
24
+ .header {
25
+ text-align: center;
26
+ margin-bottom: 30px;
27
+ }
28
+ .logo {
29
+ font-size: 24px;
30
+ font-weight: bold;
31
+ color: #10b981;
32
+ margin-bottom: 10px;
33
+ }
34
+ h1 {
35
+ color: #1f2937;
36
+ margin-bottom: 20px;
37
+ font-size: 24px;
38
+ }
39
+ .button {
40
+ display: inline-block;
41
+ padding: 12px 30px;
42
+ background-color: #10b981;
43
+ color: white;
44
+ text-decoration: none;
45
+ border-radius: 6px;
46
+ font-weight: bold;
47
+ margin: 20px 0;
48
+ transition: background-color 0.3s ease;
49
+ }
50
+ .button:hover {
51
+ background-color: #059669;
52
+ }
53
+ .footer {
54
+ margin-top: 40px;
55
+ text-align: center;
56
+ color: #6b7280;
57
+ font-size: 14px;
58
+ }
59
+ .footer a {
60
+ color: #10b981;
61
+ text-decoration: none;
62
+ }
63
+ .divider {
64
+ border-top: 1px solid #e5e7eb;
65
+ margin: 30px 0;
66
+ }
67
+ .welcome-box {
68
+ background-color: #f0fdf4;
69
+ border-left: 4px solid #10b981;
70
+ padding: 20px;
71
+ margin: 20px 0;
72
+ }
73
+ </style>
74
+ </head>
75
+ <body>
76
+ <div class="container">
77
+ <div class="header">
78
+ <div class="logo">{{appName}}</div>
79
+ </div>
80
+
81
+ <h1>Welcome, {{firstName}}! 🎉</h1>
82
+
83
+ <div class="welcome-box">
84
+ <p><strong>Congratulations!</strong> Your account has been successfully verified and you're now part of the {{appName}} community.</p>
85
+ </div>
86
+
87
+ <p>We're thrilled to have you on board! Here's what you can do next:</p>
88
+
89
+ <ul>
90
+ <li>Complete your profile to get the most out of our services</li>
91
+ <li>Explore our features and tools</li>
92
+ <li>Connect with other users in your area</li>
93
+ <li>Start using our platform to its full potential</li>
94
+ </ul>
95
+
96
+ <div style="text-align: center;">
97
+ <a href="{{loginUrl}}" class="button">Get Started</a>
98
+ </div>
99
+
100
+ <p>If you have any questions or need help getting started, don't hesitate to reach out to our support team. We're here to help!</p>
101
+
102
+ <div class="divider"></div>
103
+
104
+ <div class="footer">
105
+ <p>Welcome aboard!</p>
106
+ <p>The {{appName}} Team</p>
107
+ <br>
108
+ <p>Need help? Contact our support team or visit our <a href="{{frontendUrl}}">help center</a>.</p>
109
+ <p>&copy; 2025 {{appName}}. All rights reserved.</p>
110
+ </div>
111
+ </div>
112
+ </body>
113
+ </html>
@@ -0,0 +1,82 @@
1
+ {
2
+ "name": "arktos-backend",
3
+ "version": "1.0.0",
4
+ "description": "A modern Node.js backend API built with Arktos boilerplate",
5
+ "main": "dist/app.js",
6
+ "scripts": {
7
+ "build": "tsc",
8
+ "postinstall": "prisma generate",
9
+ "start": "node dist/app.js",
10
+ "dev": "ts-node-dev --respawn --transpile-only --ignore-watch node_modules src/app.ts",
11
+ "vercel-build": "prisma generate && npm run build",
12
+ "db:generate": "prisma generate",
13
+ "db:push": "prisma db push",
14
+ "db:migrate": "prisma migrate dev",
15
+ "db:studio": "prisma studio",
16
+ "db:seed": "ts-node prisma/seed.ts",
17
+ "db:reset": "npx prisma migrate reset --force && npm run db:seed",
18
+ "type-check": "tsc --noEmit",
19
+ "lint": "eslint src/**/*.ts",
20
+ "lint:fix": "eslint src/**/*.ts --fix",
21
+ "format": "prettier --write .",
22
+ "format:check": "prettier --check .",
23
+ "test": "echo \"Error: no test specified\" && exit 1",
24
+ "health": "curl -f http://localhost:3001/health || exit 1"
25
+ },
26
+ "prisma": {
27
+ "seed": "ts-node prisma/seed.ts"
28
+ },
29
+ "keywords": [
30
+ "nodejs",
31
+ "typescript",
32
+ "express",
33
+ "jwt",
34
+ "authentication",
35
+ "prisma",
36
+ "orm",
37
+ "postgresql",
38
+ "database",
39
+ "resend",
40
+ "email",
41
+ "auth",
42
+ "security",
43
+ "middleware",
44
+ "backend",
45
+ "api",
46
+ "rest"
47
+ ],
48
+ "author": "Your Name",
49
+ "license": "MIT",
50
+ "engines": {
51
+ "node": ">=18.0.0",
52
+ "npm": ">=8.0.0"
53
+ },
54
+ "dependencies": {
55
+ "@prisma/client": "^6.13.0",
56
+ "bcryptjs": "^2.4.3",
57
+ "cors": "^2.8.5",
58
+ "dotenv": "^17.2.1",
59
+ "express": "^5.1.0",
60
+ "express-rate-limit": "^8.0.1",
61
+ "helmet": "^8.1.0",
62
+ "jsonwebtoken": "^9.0.2",
63
+ "resend": "^6.0.0",
64
+ "winston": "^3.17.0",
65
+ "zod": "^4.0.15"
66
+ },
67
+ "devDependencies": {
68
+ "@types/bcryptjs": "^2.4.6",
69
+ "@types/cors": "^2.8.19",
70
+ "@types/express": "^5.0.3",
71
+ "@types/jsonwebtoken": "^9.0.10",
72
+ "@types/node": "^24.2.0",
73
+ "eslint": "^9.0.0",
74
+ "eslint-config-prettier": "^9.0.0",
75
+ "eslint-plugin-prettier": "^5.0.0",
76
+ "prettier": "^3.3.0",
77
+ "prisma": "^6.13.0",
78
+ "ts-node": "^10.9.2",
79
+ "ts-node-dev": "^2.0.0",
80
+ "typescript": "^5.5.0"
81
+ }
82
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,35 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2020",
4
+ "lib": ["ES2020"],
5
+ "module": "commonjs",
6
+ "rootDir": "./src",
7
+ "outDir": "./dist",
8
+ "strict": true,
9
+ "esModuleInterop": true,
10
+ "skipLibCheck": true,
11
+ "forceConsistentCasingInFileNames": true,
12
+ "resolveJsonModule": true,
13
+ "declaration": true,
14
+ "declarationMap": true,
15
+ "sourceMap": true,
16
+ "removeComments": true,
17
+ "noImplicitAny": true,
18
+ "strictNullChecks": true,
19
+ "strictFunctionTypes": true,
20
+ "noImplicitThis": true,
21
+ "noImplicitReturns": true,
22
+ "noFallthroughCasesInSwitch": true,
23
+ "moduleResolution": "node",
24
+ "baseUrl": "./",
25
+ "paths": {
26
+ "@/*": ["src/*"]
27
+ },
28
+ "allowSyntheticDefaultImports": true,
29
+ "experimentalDecorators": true,
30
+ "emitDecoratorMetadata": true,
31
+ "typeRoots": ["./node_modules/@types"]
32
+ },
33
+ "include": ["src/**/*"],
34
+ "exclude": ["node_modules", "dist", "**/*.test.ts"]
35
+ }
package/vercel.json ADDED
@@ -0,0 +1,34 @@
1
+ {
2
+ "version": 2,
3
+ "name": "arktos-backend",
4
+ "builds": [
5
+ {
6
+ "src": "server.js",
7
+ "use": "@vercel/node",
8
+ "config": {
9
+ "includeFiles": [
10
+ "prisma/schema.prisma",
11
+ "views/emails/**"
12
+ ]
13
+ }
14
+ }
15
+ ],
16
+ "routes": [
17
+ {
18
+ "src": "/(.*)",
19
+ "dest": "/server.js"
20
+ }
21
+ ],
22
+ "env": {
23
+ "NODE_ENV": "production"
24
+ },
25
+ "functions": {
26
+ "server.js": {
27
+ "maxDuration": 30
28
+ }
29
+ },
30
+ "regions": ["iad1"],
31
+ "github": {
32
+ "autoAlias": false
33
+ }
34
+ }