@seip/blue-bird 0.7.6 → 0.9.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.
- package/.env_example +34 -34
- package/AGENTS.md +174 -249
- package/LICENSE +21 -21
- package/README.md +331 -367
- package/{index.js → backend/index.js} +22 -30
- package/backend/routes/api.js +57 -57
- package/core/app.js +338 -402
- package/core/auth.js +262 -256
- package/core/cache.js +174 -174
- package/core/cli/docker.js +488 -457
- package/core/cli/init.js +333 -337
- package/core/cli/route.js +42 -42
- package/core/config.js +52 -52
- package/core/database.js +263 -263
- package/core/debug.js +248 -248
- package/core/logger.js +115 -115
- package/core/middleware.js +27 -27
- package/core/router.js +144 -144
- package/core/swagger.js +40 -40
- package/core/upload.js +77 -77
- package/core/validate.js +380 -380
- package/docker/Dockerfile +16 -16
- package/docker/docker-compose.dev.yml +6 -0
- package/docker/docker-compose.mysql.yml +92 -92
- package/docker/docker-compose.none.yml +68 -68
- package/docker/docker-compose.postgres.yml +93 -93
- package/docker/nginx.conf +98 -106
- package/docker-compose.yml +92 -92
- package/frontend/about.html +103 -0
- package/frontend/images/favicon.ico +0 -0
- package/frontend/index.html +141 -0
- package/frontend/js/tailwind.js +8 -0
- package/package.json +64 -71
- package/frontend/astro.config.mjs +0 -35
- package/frontend/public/css/app.css +0 -319
- package/frontend/public/favicon.ico +0 -0
- package/frontend/src/http/api.js +0 -29
- package/frontend/src/layouts/Layout.astro +0 -20
- package/frontend/src/pages/about.astro +0 -54
- package/frontend/src/pages/index.astro +0 -110
package/docker/nginx.conf
CHANGED
|
@@ -1,106 +1,98 @@
|
|
|
1
|
-
user nginx;
|
|
2
|
-
worker_processes auto;
|
|
3
|
-
|
|
4
|
-
error_log /var/log/nginx/error.log notice;
|
|
5
|
-
pid /var/run/nginx.pid;
|
|
6
|
-
|
|
7
|
-
events {
|
|
8
|
-
worker_connections 1024;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
http {
|
|
12
|
-
include /etc/nginx/mime.types;
|
|
13
|
-
default_type application/octet-stream;
|
|
14
|
-
|
|
15
|
-
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
|
|
16
|
-
'$status $body_bytes_sent "$http_referer" '
|
|
17
|
-
'"$http_user_agent" "$http_x_forwarded_for"';
|
|
18
|
-
|
|
19
|
-
access_log /var/log/nginx/access.log main;
|
|
20
|
-
|
|
21
|
-
sendfile on;
|
|
22
|
-
tcp_nopush on;
|
|
23
|
-
tcp_nodelay on;
|
|
24
|
-
keepalive_timeout 65;
|
|
25
|
-
types_hash_max_size 2048;
|
|
26
|
-
|
|
27
|
-
gzip on;
|
|
28
|
-
gzip_disable "msie6";
|
|
29
|
-
gzip_vary on;
|
|
30
|
-
gzip_proxied any;
|
|
31
|
-
gzip_comp_level 6;
|
|
32
|
-
gzip_buffers 16 8k;
|
|
33
|
-
gzip_http_version 1.1;
|
|
34
|
-
gzip_min_length 256;
|
|
35
|
-
gzip_types
|
|
36
|
-
text/plain
|
|
37
|
-
text/css
|
|
38
|
-
application/json
|
|
39
|
-
application/javascript
|
|
40
|
-
application/x-javascript
|
|
41
|
-
text/xml
|
|
42
|
-
application/xml
|
|
43
|
-
application/xml+rss
|
|
44
|
-
text/javascript
|
|
45
|
-
image/svg+xml;
|
|
46
|
-
|
|
47
|
-
limit_req_zone $binary_remote_addr zone=bluebird_limit:10m rate=10r/s;
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
proxy_set_header
|
|
92
|
-
proxy_set_header
|
|
93
|
-
proxy_set_header X-
|
|
94
|
-
proxy_set_header X-Forwarded-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504;
|
|
100
|
-
proxy_cache_lock on;
|
|
101
|
-
proxy_cache_bypass $cookie_auth $http_authorization;
|
|
102
|
-
proxy_no_cache $cookie_auth $http_authorization;
|
|
103
|
-
add_header X-Cache-Status $upstream_cache_status;
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
}
|
|
1
|
+
user nginx;
|
|
2
|
+
worker_processes auto;
|
|
3
|
+
|
|
4
|
+
error_log /var/log/nginx/error.log notice;
|
|
5
|
+
pid /var/run/nginx.pid;
|
|
6
|
+
|
|
7
|
+
events {
|
|
8
|
+
worker_connections 1024;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
http {
|
|
12
|
+
include /etc/nginx/mime.types;
|
|
13
|
+
default_type application/octet-stream;
|
|
14
|
+
|
|
15
|
+
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
|
|
16
|
+
'$status $body_bytes_sent "$http_referer" '
|
|
17
|
+
'"$http_user_agent" "$http_x_forwarded_for"';
|
|
18
|
+
|
|
19
|
+
access_log /var/log/nginx/access.log main;
|
|
20
|
+
|
|
21
|
+
sendfile on;
|
|
22
|
+
tcp_nopush on;
|
|
23
|
+
tcp_nodelay on;
|
|
24
|
+
keepalive_timeout 65;
|
|
25
|
+
types_hash_max_size 2048;
|
|
26
|
+
|
|
27
|
+
gzip on;
|
|
28
|
+
gzip_disable "msie6";
|
|
29
|
+
gzip_vary on;
|
|
30
|
+
gzip_proxied any;
|
|
31
|
+
gzip_comp_level 6;
|
|
32
|
+
gzip_buffers 16 8k;
|
|
33
|
+
gzip_http_version 1.1;
|
|
34
|
+
gzip_min_length 256;
|
|
35
|
+
gzip_types
|
|
36
|
+
text/plain
|
|
37
|
+
text/css
|
|
38
|
+
application/json
|
|
39
|
+
application/javascript
|
|
40
|
+
application/x-javascript
|
|
41
|
+
text/xml
|
|
42
|
+
application/xml
|
|
43
|
+
application/xml+rss
|
|
44
|
+
text/javascript
|
|
45
|
+
image/svg+xml;
|
|
46
|
+
|
|
47
|
+
limit_req_zone $binary_remote_addr zone=bluebird_limit:10m rate=10r/s;
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
server {
|
|
51
|
+
listen 80;
|
|
52
|
+
server_name localhost;
|
|
53
|
+
root /app/frontend;
|
|
54
|
+
|
|
55
|
+
resolver 127.0.0.11 valid=5s;
|
|
56
|
+
|
|
57
|
+
location ~* /(\.env|\.git|wp-content|wp-admin|xmlrpc\.php) {
|
|
58
|
+
return 444;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
location ~* \.(?:css|js|jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ {
|
|
62
|
+
expires 1M;
|
|
63
|
+
access_log off;
|
|
64
|
+
add_header Cache-Control "public";
|
|
65
|
+
try_files $uri =404;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
location / {
|
|
69
|
+
try_files $uri $uri.html $uri/ @node_app;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
location /api/ {
|
|
73
|
+
limit_req zone=bluebird_limit burst=20 nodelay;
|
|
74
|
+
set $upstream_target http://app:3000;
|
|
75
|
+
proxy_pass $upstream_target;
|
|
76
|
+
proxy_http_version 1.1;
|
|
77
|
+
proxy_set_header Connection "";
|
|
78
|
+
proxy_set_header Host $host;
|
|
79
|
+
proxy_set_header X-Real-IP $remote_addr;
|
|
80
|
+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
81
|
+
proxy_set_header X-Forwarded-Proto $scheme;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
location @node_app {
|
|
86
|
+
limit_req zone=bluebird_limit burst=20 nodelay;
|
|
87
|
+
|
|
88
|
+
set $upstream_target http://app:3000;
|
|
89
|
+
proxy_pass $upstream_target;
|
|
90
|
+
proxy_http_version 1.1;
|
|
91
|
+
proxy_set_header Connection "";
|
|
92
|
+
proxy_set_header Host $host;
|
|
93
|
+
proxy_set_header X-Real-IP $remote_addr;
|
|
94
|
+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
95
|
+
proxy_set_header X-Forwarded-Proto $scheme;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
package/docker-compose.yml
CHANGED
|
@@ -1,92 +1,92 @@
|
|
|
1
|
-
services:
|
|
2
|
-
app:
|
|
3
|
-
build:
|
|
4
|
-
context: .
|
|
5
|
-
dockerfile: docker/Dockerfile
|
|
6
|
-
container_name: ${TITLE:-bluebird}-app
|
|
7
|
-
restart: unless-stopped
|
|
8
|
-
expose:
|
|
9
|
-
- "3000"
|
|
10
|
-
volumes:
|
|
11
|
-
- .:/app
|
|
12
|
-
- /app/node_modules
|
|
13
|
-
env_file:
|
|
14
|
-
- .env
|
|
15
|
-
environment:
|
|
16
|
-
- NODE_ENV=production
|
|
17
|
-
- DEBUG=false
|
|
18
|
-
- DATABASE_URL=mysql://${DB_USER:-root}:${DB_PASSWORD:-root}@mysql:${DB_PORT:-3306}/${DB_NAME:-blue_bird}
|
|
19
|
-
- REDIS_HOST=redis
|
|
20
|
-
- REDIS_PORT=6379
|
|
21
|
-
- PORT=3000
|
|
22
|
-
depends_on:
|
|
23
|
-
mysql:
|
|
24
|
-
condition: service_healthy
|
|
25
|
-
redis:
|
|
26
|
-
condition: service_healthy
|
|
27
|
-
networks:
|
|
28
|
-
- bluebird_net
|
|
29
|
-
profiles:
|
|
30
|
-
- prod
|
|
31
|
-
|
|
32
|
-
nginx:
|
|
33
|
-
image: nginx:1.27-alpine
|
|
34
|
-
container_name: ${TITLE:-bluebird}-nginx
|
|
35
|
-
restart: unless-stopped
|
|
36
|
-
ports:
|
|
37
|
-
- "${PORT:-3000}:80"
|
|
38
|
-
volumes:
|
|
39
|
-
- .:/app:ro
|
|
40
|
-
- ./docker/nginx.conf:/etc/nginx/nginx.conf:ro
|
|
41
|
-
depends_on:
|
|
42
|
-
app:
|
|
43
|
-
condition: service_started
|
|
44
|
-
networks:
|
|
45
|
-
- bluebird_net
|
|
46
|
-
profiles:
|
|
47
|
-
- prod
|
|
48
|
-
|
|
49
|
-
mysql:
|
|
50
|
-
image: mysql:8.0
|
|
51
|
-
container_name: ${TITLE:-bluebird}-mysql
|
|
52
|
-
restart: unless-stopped
|
|
53
|
-
environment:
|
|
54
|
-
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD:-root}
|
|
55
|
-
MYSQL_DATABASE: ${DB_NAME:-blue_bird}
|
|
56
|
-
ports:
|
|
57
|
-
- "${DB_PORT:-3306}:3306"
|
|
58
|
-
volumes:
|
|
59
|
-
- mysql_data:/var/lib/mysql
|
|
60
|
-
healthcheck:
|
|
61
|
-
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${DB_PASSWORD:-root}"]
|
|
62
|
-
interval: 10s
|
|
63
|
-
timeout: 5s
|
|
64
|
-
retries: 5
|
|
65
|
-
start_period: 30s
|
|
66
|
-
networks:
|
|
67
|
-
- bluebird_net
|
|
68
|
-
|
|
69
|
-
redis:
|
|
70
|
-
image: redis:7-alpine
|
|
71
|
-
container_name: ${TITLE:-bluebird}-redis
|
|
72
|
-
restart: unless-stopped
|
|
73
|
-
ports:
|
|
74
|
-
- "${REDIS_PORT:-6379}:6379"
|
|
75
|
-
volumes:
|
|
76
|
-
- redis_data:/data
|
|
77
|
-
networks:
|
|
78
|
-
- bluebird_net
|
|
79
|
-
healthcheck:
|
|
80
|
-
test: ["CMD", "redis-cli", "ping"]
|
|
81
|
-
interval: 5s
|
|
82
|
-
timeout: 3s
|
|
83
|
-
retries: 5
|
|
84
|
-
|
|
85
|
-
volumes:
|
|
86
|
-
mysql_data:
|
|
87
|
-
redis_data:
|
|
88
|
-
|
|
89
|
-
networks:
|
|
90
|
-
bluebird_net:
|
|
91
|
-
name: ${TITLE:-bluebird}_network
|
|
92
|
-
driver: bridge
|
|
1
|
+
services:
|
|
2
|
+
app:
|
|
3
|
+
build:
|
|
4
|
+
context: .
|
|
5
|
+
dockerfile: docker/Dockerfile
|
|
6
|
+
container_name: ${TITLE:-bluebird}-app
|
|
7
|
+
restart: unless-stopped
|
|
8
|
+
expose:
|
|
9
|
+
- "3000"
|
|
10
|
+
volumes:
|
|
11
|
+
- .:/app
|
|
12
|
+
- /app/node_modules
|
|
13
|
+
env_file:
|
|
14
|
+
- .env
|
|
15
|
+
environment:
|
|
16
|
+
- NODE_ENV=production
|
|
17
|
+
- DEBUG=false
|
|
18
|
+
- DATABASE_URL=mysql://${DB_USER:-root}:${DB_PASSWORD:-root}@mysql:${DB_PORT:-3306}/${DB_NAME:-blue_bird}
|
|
19
|
+
- REDIS_HOST=redis
|
|
20
|
+
- REDIS_PORT=6379
|
|
21
|
+
- PORT=3000
|
|
22
|
+
depends_on:
|
|
23
|
+
mysql:
|
|
24
|
+
condition: service_healthy
|
|
25
|
+
redis:
|
|
26
|
+
condition: service_healthy
|
|
27
|
+
networks:
|
|
28
|
+
- bluebird_net
|
|
29
|
+
profiles:
|
|
30
|
+
- prod
|
|
31
|
+
|
|
32
|
+
nginx:
|
|
33
|
+
image: nginx:1.27-alpine
|
|
34
|
+
container_name: ${TITLE:-bluebird}-nginx
|
|
35
|
+
restart: unless-stopped
|
|
36
|
+
ports:
|
|
37
|
+
- "${PORT:-3000}:80"
|
|
38
|
+
volumes:
|
|
39
|
+
- .:/app:ro
|
|
40
|
+
- ./docker/nginx.conf:/etc/nginx/nginx.conf:ro
|
|
41
|
+
depends_on:
|
|
42
|
+
app:
|
|
43
|
+
condition: service_started
|
|
44
|
+
networks:
|
|
45
|
+
- bluebird_net
|
|
46
|
+
profiles:
|
|
47
|
+
- prod
|
|
48
|
+
|
|
49
|
+
mysql:
|
|
50
|
+
image: mysql:8.0
|
|
51
|
+
container_name: ${TITLE:-bluebird}-mysql
|
|
52
|
+
restart: unless-stopped
|
|
53
|
+
environment:
|
|
54
|
+
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD:-root}
|
|
55
|
+
MYSQL_DATABASE: ${DB_NAME:-blue_bird}
|
|
56
|
+
ports:
|
|
57
|
+
- "${DB_PORT:-3306}:3306"
|
|
58
|
+
volumes:
|
|
59
|
+
- mysql_data:/var/lib/mysql
|
|
60
|
+
healthcheck:
|
|
61
|
+
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${DB_PASSWORD:-root}"]
|
|
62
|
+
interval: 10s
|
|
63
|
+
timeout: 5s
|
|
64
|
+
retries: 5
|
|
65
|
+
start_period: 30s
|
|
66
|
+
networks:
|
|
67
|
+
- bluebird_net
|
|
68
|
+
|
|
69
|
+
redis:
|
|
70
|
+
image: redis:7-alpine
|
|
71
|
+
container_name: ${TITLE:-bluebird}-redis
|
|
72
|
+
restart: unless-stopped
|
|
73
|
+
ports:
|
|
74
|
+
- "${REDIS_PORT:-6379}:6379"
|
|
75
|
+
volumes:
|
|
76
|
+
- redis_data:/data
|
|
77
|
+
networks:
|
|
78
|
+
- bluebird_net
|
|
79
|
+
healthcheck:
|
|
80
|
+
test: ["CMD", "redis-cli", "ping"]
|
|
81
|
+
interval: 5s
|
|
82
|
+
timeout: 3s
|
|
83
|
+
retries: 5
|
|
84
|
+
|
|
85
|
+
volumes:
|
|
86
|
+
mysql_data:
|
|
87
|
+
redis_data:
|
|
88
|
+
|
|
89
|
+
networks:
|
|
90
|
+
bluebird_net:
|
|
91
|
+
name: ${TITLE:-bluebird}_network
|
|
92
|
+
driver: bridge
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en" data-theme="dark">
|
|
3
|
+
|
|
4
|
+
<head>
|
|
5
|
+
<meta charset="UTF-8">
|
|
6
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
7
|
+
<title>Blue Bird - About</title>
|
|
8
|
+
<link rel="canonical" href="https://seip25.github.io/Blue-bird/" />
|
|
9
|
+
<meta name="description" content="Blue Bird is a fast, structured, and opinionated Express.js framework for developers who want
|
|
10
|
+
visual elegance and performance with raw HTML and CSS.">
|
|
11
|
+
<meta name="keywords" content="">
|
|
12
|
+
<meta name="author" content="Seip25">
|
|
13
|
+
<link rel="icon" href="/images/favicon.ico" />
|
|
14
|
+
</head>
|
|
15
|
+
|
|
16
|
+
<body class="min-h-screen bg-slate-950 text-white font-sans antialiased selection:bg-blue-500 selection:text-white">
|
|
17
|
+
<header class="sticky top-0 z-50 px-4 py-3">
|
|
18
|
+
<div
|
|
19
|
+
class="max-w-7xl mx-auto flex items-center justify-between backdrop-blur-md bg-slate-900/60 border border-white/10 rounded-2xl px-6 py-3 shadow-lg">
|
|
20
|
+
<div class="flex items-center space-x-3">
|
|
21
|
+
<div
|
|
22
|
+
class="w-10 h-10 bg-gradient-to-tr from-blue-500 to-indigo-600 rounded-xl flex items-center justify-center shadow-md shadow-blue-500/30">
|
|
23
|
+
<svg class="w-6 h-6 text-white" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
24
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
|
|
25
|
+
d="M12 19l9 2-9-18-9 18 9-2zm0 0v-8" />
|
|
26
|
+
</svg>
|
|
27
|
+
</div>
|
|
28
|
+
<span
|
|
29
|
+
class="text-xl font-bold tracking-tight bg-gradient-to-r from-blue-400 via-indigo-200 to-white bg-clip-text text-transparent">Blue
|
|
30
|
+
Bird</span>
|
|
31
|
+
</div>
|
|
32
|
+
|
|
33
|
+
<nav class="flex space-x-8 text-sm font-medium text-slate-300">
|
|
34
|
+
<a href="/" class="hover:text-blue-400 transition-colors">Home</a>
|
|
35
|
+
<a href="/about" class="hover:text-blue-400 transition-colors">About</a>
|
|
36
|
+
</nav>
|
|
37
|
+
</div>
|
|
38
|
+
</header>
|
|
39
|
+
|
|
40
|
+
<main class="max-w-7xl mx-auto px-4 pt-12 pb-24">
|
|
41
|
+
|
|
42
|
+
<div
|
|
43
|
+
class="relative py-16 px-6 md:px-12 rounded-3xl overflow-hidden bg-gradient-to-b from-blue-900/20 to-slate-950 border border-white/5 shadow-2xl mb-12">
|
|
44
|
+
<div class="relative max-w-4xl mx-auto space-y-6 text-center">
|
|
45
|
+
<h1
|
|
46
|
+
class="text-4xl sm:text-5xl font-extrabold tracking-tight bg-gradient-to-r from-blue-400 via-indigo-300 to-white bg-clip-text text-transparent">
|
|
47
|
+
About Blue Bird
|
|
48
|
+
</h1>
|
|
49
|
+
<p class="text-lg sm:text-xl text-slate-400 leading-relaxed max-w-2xl mx-auto">
|
|
50
|
+
Built for performance, simplicity, and raw speed.
|
|
51
|
+
</p>
|
|
52
|
+
</div>
|
|
53
|
+
</div>
|
|
54
|
+
|
|
55
|
+
<section class="max-w-4xl mx-auto space-y-12">
|
|
56
|
+
<article class="p-8 rounded-2xl bg-slate-900/40 border border-white/5 shadow-xl">
|
|
57
|
+
<h2 class="text-2xl font-bold text-white mb-4">Our Philosophy</h2>
|
|
58
|
+
<p class="text-slate-400 leading-relaxed mb-4">
|
|
59
|
+
Blue Bird was born out of a desire for a clean, performance-first approach to web development. We
|
|
60
|
+
believe in harnessing the raw power of Express.js and Nginx, stripping away unnecessary bloat, and
|
|
61
|
+
providing developers with a robust foundation that just works.
|
|
62
|
+
</p>
|
|
63
|
+
<p class="text-slate-400 leading-relaxed">
|
|
64
|
+
By separating the static frontend delivery (handled blazingly fast by Nginx) from the dynamic API
|
|
65
|
+
layer (powered by Express and Redis), Blue Bird achieves unparalleled performance out of the box.
|
|
66
|
+
</p>
|
|
67
|
+
</article>
|
|
68
|
+
|
|
69
|
+
<article class="p-8 rounded-2xl bg-slate-900/40 border border-white/5 shadow-xl">
|
|
70
|
+
<h2 class="text-2xl font-bold text-white mb-4">Why Blue Bird?</h2>
|
|
71
|
+
<ul class="space-y-3 text-slate-400">
|
|
72
|
+
<li class="flex items-start">
|
|
73
|
+
<span class="text-blue-500 mr-2">✓</span>
|
|
74
|
+
<span><strong>Zero Config Docker:</strong> Go from development to production seamlessly.</span>
|
|
75
|
+
</li>
|
|
76
|
+
<li class="flex items-start">
|
|
77
|
+
<span class="text-blue-500 mr-2">✓</span>
|
|
78
|
+
<span><strong>Military Grade Security:</strong> Built-in AES-256-GCM JWT encryption.</span>
|
|
79
|
+
</li>
|
|
80
|
+
<li class="flex items-start">
|
|
81
|
+
<span class="text-blue-500 mr-2">✓</span>
|
|
82
|
+
<span><strong>High Performance:</strong> Redis caching for the data layer and Nginx static
|
|
83
|
+
delivery.</span>
|
|
84
|
+
</li>
|
|
85
|
+
<li class="flex items-start">
|
|
86
|
+
<span class="text-blue-500 mr-2">✓</span>
|
|
87
|
+
<span><strong>Pure HTML/CSS:</strong> No bloated frontend frameworks. Write code close to the
|
|
88
|
+
metal.</span>
|
|
89
|
+
</li>
|
|
90
|
+
</ul>
|
|
91
|
+
</article>
|
|
92
|
+
</section>
|
|
93
|
+
</main>
|
|
94
|
+
|
|
95
|
+
<footer class="border-t border-white/5 py-8 bg-slate-950 mt-16">
|
|
96
|
+
<div class="max-w-7xl mx-auto px-4 text-center text-sm text-slate-500">
|
|
97
|
+
<p>Powered by Blue Bird Framework. All rights reserved.</p>
|
|
98
|
+
</div>
|
|
99
|
+
</footer>
|
|
100
|
+
<script src="/js/tailwind.js"></script>
|
|
101
|
+
</body>
|
|
102
|
+
|
|
103
|
+
</html>
|
|
Binary file
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en" data-theme="dark">
|
|
3
|
+
|
|
4
|
+
<head>
|
|
5
|
+
<meta charset="UTF-8">
|
|
6
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
7
|
+
<title>Blue Bird</title>
|
|
8
|
+
<link rel="canonical" href="https://seip25.github.io/Blue-bird/" />
|
|
9
|
+
<meta name="description" content="Blue Bird is a fast, structured, and opinionated Express.js framework for developers who want
|
|
10
|
+
visual elegance and performance with raw HTML and CSS.">
|
|
11
|
+
<meta name="keywords" content="">
|
|
12
|
+
<meta name="author" content="Seip25">
|
|
13
|
+
<link rel="icon" href="/images/favicon.ico" />
|
|
14
|
+
</head>
|
|
15
|
+
|
|
16
|
+
<body class="min-h-screen bg-slate-950 text-white font-sans antialiased selection:bg-blue-500 selection:text-white">
|
|
17
|
+
<header class="sticky top-0 z-50 px-4 py-3">
|
|
18
|
+
<div
|
|
19
|
+
class="max-w-7xl mx-auto flex items-center justify-between backdrop-blur-md bg-slate-900/60 border border-white/10 rounded-2xl px-6 py-3 shadow-lg">
|
|
20
|
+
<div class="flex items-center space-x-3">
|
|
21
|
+
<div
|
|
22
|
+
class="w-10 h-10 bg-gradient-to-tr from-blue-500 to-indigo-600 rounded-xl flex items-center justify-center shadow-md shadow-blue-500/30">
|
|
23
|
+
<svg class="w-6 h-6 text-white" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
24
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
|
|
25
|
+
d="M12 19l9 2-9-18-9 18 9-2zm0 0v-8" />
|
|
26
|
+
</svg>
|
|
27
|
+
</div>
|
|
28
|
+
<span
|
|
29
|
+
class="text-xl font-bold tracking-tight bg-gradient-to-r from-blue-400 via-indigo-200 to-white bg-clip-text text-transparent">Blue
|
|
30
|
+
Bird</span>
|
|
31
|
+
</div>
|
|
32
|
+
|
|
33
|
+
<nav class="flex space-x-8 text-sm font-medium text-slate-300">
|
|
34
|
+
<a href="/" class="hover:text-blue-400 transition-colors">Home</a>
|
|
35
|
+
<a href="/about" class="hover:text-blue-400 transition-colors">About</a>
|
|
36
|
+
</nav>
|
|
37
|
+
</div>
|
|
38
|
+
</header>
|
|
39
|
+
|
|
40
|
+
<main class="max-w-7xl mx-auto px-4 pt-12 pb-24">
|
|
41
|
+
|
|
42
|
+
<div
|
|
43
|
+
class="relative py-16 px-6 md:px-12 rounded-3xl overflow-hidden bg-gradient-to-b from-blue-900/20 to-slate-950 border border-white/5 shadow-2xl">
|
|
44
|
+
<div class="absolute -top-40 -left-40 w-96 h-96 bg-blue-500/10 rounded-full blur-3xl"></div>
|
|
45
|
+
<div class="absolute -right-40 -bottom-40 w-96 h-96 bg-indigo-500/10 rounded-full blur-3xl"></div>
|
|
46
|
+
|
|
47
|
+
<div class="relative max-w-4xl mx-auto text-center space-y-8">
|
|
48
|
+
<span
|
|
49
|
+
class="inline-flex items-center px-4 py-1.5 rounded-full text-xs font-semibold tracking-wider bg-blue-500/10 text-blue-400 border border-blue-500/20 uppercase">
|
|
50
|
+
Welcome to Blue Bird
|
|
51
|
+
</span>
|
|
52
|
+
|
|
53
|
+
<h1
|
|
54
|
+
class="text-4xl sm:text-6xl font-extrabold tracking-tight bg-gradient-to-r from-blue-400 via-indigo-300 to-white bg-clip-text text-transparent">
|
|
55
|
+
Hello, Developer! Welcome to the next level.
|
|
56
|
+
</h1>
|
|
57
|
+
|
|
58
|
+
<p class="text-lg sm:text-xl text-slate-400 leading-relaxed max-w-2xl mx-auto">
|
|
59
|
+
Blue Bird is a fast, structured, and opinionated Express.js framework for developers who want
|
|
60
|
+
visual elegance and performance with raw HTML and CSS.
|
|
61
|
+
</p>
|
|
62
|
+
|
|
63
|
+
<div class="flex flex-wrap justify-center gap-4 pt-4">
|
|
64
|
+
<a href="/about"
|
|
65
|
+
class="px-8 py-3.5 rounded-xl font-semibold bg-gradient-to-r from-blue-500 to-indigo-600 hover:from-blue-600 hover:to-indigo-700 shadow-lg shadow-blue-500/20 transform hover:-translate-y-0.5 transition-all">
|
|
66
|
+
About Us →
|
|
67
|
+
</a>
|
|
68
|
+
<a href="https://github.com/seip25/Blue-bird" target="_blank"
|
|
69
|
+
class="px-8 py-3.5 rounded-xl font-semibold bg-slate-900 border border-white/10 hover:bg-slate-800 transition-all">
|
|
70
|
+
GitHub
|
|
71
|
+
</a>
|
|
72
|
+
</div>
|
|
73
|
+
</div>
|
|
74
|
+
</div>
|
|
75
|
+
|
|
76
|
+
<section class="mt-24 space-y-12">
|
|
77
|
+
<div class="text-center space-y-3">
|
|
78
|
+
<h2 class="text-3xl font-bold bg-gradient-to-r from-white to-slate-400 bg-clip-text text-transparent">
|
|
79
|
+
High-Performance Core Features</h2>
|
|
80
|
+
<p class="text-slate-400">Everything preconfigured to serve raw, optimized HTML with minimal
|
|
81
|
+
overhead.</p>
|
|
82
|
+
</div>
|
|
83
|
+
|
|
84
|
+
<div class="grid grid-cols-1 md:grid-cols-3 gap-6">
|
|
85
|
+
<div
|
|
86
|
+
class="group relative p-8 rounded-2xl bg-slate-900/40 border border-white/5 hover:border-blue-500/30 transition-all duration-300 hover:shadow-xl hover:shadow-blue-500/5 hover:-translate-y-1">
|
|
87
|
+
<div
|
|
88
|
+
class="w-12 h-12 bg-blue-500/10 text-blue-400 rounded-xl flex items-center justify-center mb-6 group-hover:scale-110 transition-transform">
|
|
89
|
+
<svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
90
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
|
|
91
|
+
d="M13 10V3L4 14h7v7l9-11h-7z" />
|
|
92
|
+
</svg>
|
|
93
|
+
</div>
|
|
94
|
+
<h3 class="text-xl font-semibold mb-3 group-hover:text-blue-400 transition-colors">Ultra-Fast
|
|
95
|
+
HTML Render</h3>
|
|
96
|
+
<p class="text-sm text-slate-400 leading-relaxed">Direct static HTML rendering using high-speed
|
|
97
|
+
string placeholder replacement, bypassing heavy parsing engines completely.</p>
|
|
98
|
+
</div>
|
|
99
|
+
|
|
100
|
+
<div
|
|
101
|
+
class="group relative p-8 rounded-2xl bg-slate-900/40 border border-white/5 hover:border-blue-500/30 transition-all duration-300 hover:shadow-xl hover:shadow-blue-500/5 hover:-translate-y-1">
|
|
102
|
+
<div
|
|
103
|
+
class="w-12 h-12 bg-indigo-500/10 text-indigo-400 rounded-xl flex items-center justify-center mb-6 group-hover:scale-110 transition-transform">
|
|
104
|
+
<svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
105
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
|
|
106
|
+
d="M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z" />
|
|
107
|
+
</svg>
|
|
108
|
+
</div>
|
|
109
|
+
<h3 class="text-xl font-semibold mb-3 group-hover:text-indigo-400 transition-colors">In-Memory
|
|
110
|
+
HTML Caching</h3>
|
|
111
|
+
<p class="text-sm text-slate-400 leading-relaxed">Configurable time-to-live caching. Rendered
|
|
112
|
+
pages are stored in RAM for instant, sub-millisecond delivery in production.</p>
|
|
113
|
+
</div>
|
|
114
|
+
|
|
115
|
+
<div
|
|
116
|
+
class="group relative p-8 rounded-2xl bg-slate-900/40 border border-white/5 hover:border-blue-500/30 transition-all duration-300 hover:shadow-xl hover:shadow-blue-500/5 hover:-translate-y-1">
|
|
117
|
+
<div
|
|
118
|
+
class="w-12 h-12 bg-teal-500/10 text-teal-400 rounded-xl flex items-center justify-center mb-6 group-hover:scale-110 transition-transform">
|
|
119
|
+
<svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
120
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
|
|
121
|
+
d="M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z" />
|
|
122
|
+
</svg>
|
|
123
|
+
</div>
|
|
124
|
+
<h3 class="text-xl font-semibold mb-3 group-hover:text-teal-400 transition-colors">JWT & Route
|
|
125
|
+
Security</h3>
|
|
126
|
+
<p class="text-sm text-slate-400 leading-relaxed">Secure cookie management, GCM-encrypted JWT
|
|
127
|
+
tokens, custom helmet configurations, and route rate limiting built-in.</p>
|
|
128
|
+
</div>
|
|
129
|
+
</div>
|
|
130
|
+
</section>
|
|
131
|
+
</main>
|
|
132
|
+
|
|
133
|
+
<footer class="border-t border-white/5 py-8 bg-slate-950 mt-16">
|
|
134
|
+
<div class="max-w-7xl mx-auto px-4 text-center text-sm text-slate-500">
|
|
135
|
+
<p>Powered by Blue Bird Framework. All rights reserved.</p>
|
|
136
|
+
</div>
|
|
137
|
+
</footer>
|
|
138
|
+
<script src="/js/tailwind.js"></script>
|
|
139
|
+
</body>
|
|
140
|
+
|
|
141
|
+
</html>
|