@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.
Files changed (40) hide show
  1. package/.env_example +34 -34
  2. package/AGENTS.md +174 -249
  3. package/LICENSE +21 -21
  4. package/README.md +331 -367
  5. package/{index.js → backend/index.js} +22 -30
  6. package/backend/routes/api.js +57 -57
  7. package/core/app.js +338 -402
  8. package/core/auth.js +262 -256
  9. package/core/cache.js +174 -174
  10. package/core/cli/docker.js +488 -457
  11. package/core/cli/init.js +333 -337
  12. package/core/cli/route.js +42 -42
  13. package/core/config.js +52 -52
  14. package/core/database.js +263 -263
  15. package/core/debug.js +248 -248
  16. package/core/logger.js +115 -115
  17. package/core/middleware.js +27 -27
  18. package/core/router.js +144 -144
  19. package/core/swagger.js +40 -40
  20. package/core/upload.js +77 -77
  21. package/core/validate.js +380 -380
  22. package/docker/Dockerfile +16 -16
  23. package/docker/docker-compose.dev.yml +6 -0
  24. package/docker/docker-compose.mysql.yml +92 -92
  25. package/docker/docker-compose.none.yml +68 -68
  26. package/docker/docker-compose.postgres.yml +93 -93
  27. package/docker/nginx.conf +98 -106
  28. package/docker-compose.yml +92 -92
  29. package/frontend/about.html +103 -0
  30. package/frontend/images/favicon.ico +0 -0
  31. package/frontend/index.html +141 -0
  32. package/frontend/js/tailwind.js +8 -0
  33. package/package.json +64 -71
  34. package/frontend/astro.config.mjs +0 -35
  35. package/frontend/public/css/app.css +0 -319
  36. package/frontend/public/favicon.ico +0 -0
  37. package/frontend/src/http/api.js +0 -29
  38. package/frontend/src/layouts/Layout.astro +0 -20
  39. package/frontend/src/pages/about.astro +0 -54
  40. 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
- proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=astro_cache:10m max_size=1g inactive=60m use_temp_path=off;
50
-
51
- server {
52
- listen 80;
53
- server_name localhost;
54
- root /app/frontend/dist/client;
55
-
56
- resolver 127.0.0.11 valid=5s;
57
-
58
- location ~* /(\.env|\.git|wp-content|wp-admin|xmlrpc\.php) {
59
- return 444;
60
- }
61
-
62
- location / {
63
- try_files $uri @node_app;
64
- }
65
-
66
- location /api/ {
67
- limit_req zone=bluebird_limit burst=20 nodelay;
68
- set $upstream_target http://app:3000;
69
- proxy_pass $upstream_target;
70
- proxy_http_version 1.1;
71
- proxy_set_header Connection "";
72
- proxy_set_header Host $host;
73
- proxy_set_header X-Real-IP $remote_addr;
74
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
75
- proxy_set_header X-Forwarded-Proto $scheme;
76
- }
77
-
78
- location /_astro/ {
79
- expires max;
80
- add_header Cache-Control "public, max-age=31536000, immutable";
81
- try_files $uri =404;
82
- }
83
-
84
- location @node_app {
85
- limit_req zone=bluebird_limit burst=20 nodelay;
86
-
87
- set $upstream_target http://app:3000;
88
- proxy_pass $upstream_target;
89
- proxy_http_version 1.1;
90
- proxy_set_header Connection "";
91
- proxy_set_header Host $host;
92
- proxy_set_header X-Real-IP $remote_addr;
93
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
94
- proxy_set_header X-Forwarded-Proto $scheme;
95
-
96
- proxy_cache astro_cache;
97
- proxy_cache_valid 200 302 10s;
98
- proxy_cache_valid 404 1m;
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
+ }
@@ -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 &rarr;
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>