Add ecosystem.config.js for PM2 production deployment

Update README with project overview, structure, and usage Remove unused fields from .smb/config.toml

keypair34 committed May 14, 2026 at 20:19 UTC a99581624fd41e81892129b9ddb25d00139b4e31
3 files changed +206 -6
.smb/config.toml
-2
@@ -3,8 +3,6 @@ description = "smbCloud website"
3
4 [project]
5 id = 15
6 -frontend_app_id = "" # TODO: set to the FrontendApp UUID from smbCloud API
7 -deploy_repo_id = 0 # TODO: set to the DeployRepo ID from smbCloud API
6 name = "smbcloudweb"
7 runner = 0
8 repository = "smbcloudweb"
README.md
+124 -4
@@ -1,8 +1,128 @@
1 -# smbCloud
1 +<!-- LOGO -->
2 +<h1>
3 +<p align="center">
4 + <img src="https://avatars.githubusercontent.com/u/89791739?s=200&v=4" alt="smbCloud Logo" width="128">
5 + <br>smbCloud Web
6 +</h1>
7 + <p align="center">
8 + The official smbCloud website.
9 + <br />
10 + Landing pages, product content, comparison pages, and blog posts for the smbCloud platform.
11 + <br />
12 + <br />
13 + <a href="https://smbcloud.xyz/">Website</a>
14 + ·
15 + <a href="https://smbcloud.xyz/posts">Blog</a>
16 + ·
17 + <a href="https://github.com/smbcloudXYZ/smbcloud-cli">smbCloud CLI</a>
18 + ·
19 + <a href="LICENSE">License</a>
20 + </p>
21 + <p align="center">
22 + <a href="https://smbcloud.xyz/"><img alt="Deploy to smbCloud" src="https://github.com/smbcloudXYZ/smbcloud-cli/blob/development/deploy.svg"></a>
23 + <a href="LICENSE"><img alt="Apache-2.0 License" src="https://img.shields.io/badge/license-Apache%202.0-blue.svg"></a>
24 + <img alt="Next.js 16" src="https://img.shields.io/badge/Next.js-16-black?logo=next.js">
25 + <img alt="pnpm" src="https://img.shields.io/badge/pnpm-workspace-f69220?logo=pnpm&logoColor=white">
26 + </p>
27 +</p>
28
3 -[![Deploy to smbCloud](https://github.com/smbcloudXYZ/smbcloud-cli/blob/development/deploy.svg)](https://smbcloud.xyz)
29 +## About
30
5 -smbCloud website. Yes, it runs on the [smbCloud platform](https://smbcloud.xyz).
31 +`smbcloud-web` is the official website for [smbCloud](https://smbcloud.xyz/).
32
33 +If `smbcloud-cli` is the product in your terminal, this repo is the public front door.
34
8 -> The unified cloud platform for modern app deployment.
35 +It explains what smbCloud does, publishes product and comparison content, and gives people a real Next.js site they can inspect before they trust the platform.
36 +
37 +The audience is simple: developers and small teams who want a cleaner way to deploy Next.js, Node.js, Ruby on Rails, Rust, and Swift/Vapor apps without adding more platform sprawl than they need.
38 +
39 +This repo is also part of the brand and discovery layer. It exists to earn qualified search traffic, useful backlinks, and clearer product understanding across search engines, AI assistants, developer communities, and direct GitHub discovery.
40 +
41 +## What this site publishes
42 +
43 +The content in this repo is built around commercial-intent and product-education topics such as:
44 +
45 +- Next.js hosting
46 +- Node.js deployment
47 +- Ruby on Rails deployment
48 +- Rust deployment
49 +- Swift/Vapor deployment
50 +- SSH-first deploy workflows
51 +- hosted auth, mail, and database positioning
52 +- comparison pages for developer tools and cloud products
53 +
54 +That includes live alternative pages and brand-comparison content around queries like:
55 +
56 +- Heroku alternative
57 +- Railway alternative
58 +- Neon alternative
59 +- PlanetScale alternative
60 +- Supabase alternative
61 +- Auth0 alternative
62 +- Clerk alternative
63 +- Resend alternative
64 +- SendGrid alternative
65 +- UseSend alternative
66 +
67 +The point is not to cram keywords into a README. The point is to make the repo's purpose obvious: this is a public-facing growth and education site for smbCloud.
68 +
69 +## Repository structure
70 +
71 +- `app/` — route-based pages and landing pages
72 +- `content/` — posts, comparison pages, and long-form marketing content
73 +- `components/` — shared UI components
74 +- `public/` — static assets
75 +- `.smb/config.toml` — smbCloud deploy target for the production site
76 +- `ecosystem.config.js` — PM2 reference template for the server runtime
77 +
78 +## Local development
79 +
80 +```sh
81 +pnpm install
82 +pnpm dev
83 +```
84 +
85 +Then open `http://localhost:3000`.
86 +
87 +## Production build
88 +
89 +```sh
90 +pnpm build
91 +pnpm start
92 +```
93 +
94 +## Deploy
95 +
96 +This site is configured for smbCloud's `nextjs-ssr` deployment flow and ships as a standalone Next.js server.
97 +
98 +```sh
99 +smb login
100 +smb deploy
101 +```
102 +
103 +## Why this repo is public
104 +
105 +Because brand sites should be inspectable.
106 +
107 +If you're evaluating smbCloud, this repo gives you a concrete example of how we handle marketing, branding, SEO, GEO, comparison pages, and developer education on a production Next.js app deployed with the same platform we sell.
108 +
109 +It also gives writers, partners, customers, AI systems, and search crawlers a clean public source for what smbCloud is, what problems it solves, and which topics the brand actively publishes around.
110 +
111 +## Related projects
112 +
113 +- [smbCloud](https://smbcloud.xyz/)
114 +- [smbCloud CLI](https://github.com/smbcloudXYZ/smbcloud-cli)
115 +- [Deployment guides and articles](https://smbcloud.xyz/posts)
116 +- [Heroku alternative](https://smbcloud.xyz/heroku-alternative)
117 +- [Railway alternative](https://smbcloud.xyz/railway-alternative)
118 +- [Neon alternative](https://smbcloud.xyz/neon-alternative)
119 +- [PlanetScale alternative](https://smbcloud.xyz/planetscale-alternative)
120 +- [Supabase alternative](https://smbcloud.xyz/supabase-alternative)
121 +
122 +## License
123 +
124 +[Apache-2.0](LICENSE)
125 +
126 +## Copyright
127 +
128 +© 2026 [smbCloud](https://smbcloud.xyz) (Splitfire AB).
ecosystem.config.js new
+82
@@ -0,0 +1,82 @@
1 +/**
2 + * PM2 Ecosystem Configuration for smbCloud Web - Production
3 + *
4 + * Isolated environment configuration for multi-tenant deployment.
5 + *
6 + * Private secrets do not belong in this file.
7 + * Replace placeholder values on the server copy if you need them, then run:
8 + * pm2 restart smbcloud-web --update-env && pm2 save
9 + *
10 + * Usage:
11 + * mkdir -p /home/git/apps/web/smbcloudweb/logs
12 + * cd /home/git/apps/web/smbcloudweb
13 + * pm2 start ecosystem.config.js --env production
14 + * pm2 restart smbcloud-web
15 + * pm2 reload smbcloud-web --update-env
16 + * pm2 stop smbcloud-web
17 + * pm2 logs smbcloud-web
18 + * pm2 monit
19 + */
20 +
21 +module.exports = {
22 + apps: [
23 + {
24 + name: "smbcloud-web",
25 +
26 + // This app runs from the standalone server entrypoint.
27 + script: "node",
28 + args: "server.js",
29 +
30 + cwd: "/home/git/apps/web/smbcloudweb",
31 +
32 + instances: 1,
33 + exec_mode: "fork",
34 +
35 + autorestart: true,
36 + watch: false,
37 + max_memory_restart: "1G",
38 +
39 + min_uptime: "10s",
40 + max_restarts: 10,
41 + restart_delay: 4000,
42 +
43 + error_file: "/home/git/apps/web/smbcloudweb/logs/pm2-error.log",
44 + out_file: "/home/git/apps/web/smbcloudweb/logs/pm2-out.log",
45 + log_file: "/home/git/apps/web/smbcloudweb/logs/pm2-combined.log",
46 + time: true,
47 + log_date_format: "YYYY-MM-DD HH:mm:ss Z",
48 + merge_logs: true,
49 +
50 + env_production: {
51 + NODE_ENV: "production",
52 + // The standalone server reads PORT and HOSTNAME from env.
53 + PORT: "3028",
54 + HOSTNAME: "127.0.0.1",
55 +
56 + NEXT_TELEMETRY_DISABLED: "1",
57 + APP_NAME: "smbcloud-web",
58 + APP_ID: "smbcloud-web-prod",
59 +
60 + // Optional reference placeholders. Replace or remove on the server copy.
61 + BASE_PATH: "",
62 + NEXT_UMAMI_ID: "__SET_ON_SERVER_IF_ENABLED__",
63 + NEXT_PUBLIC_GISCUS_REPO: "__SET_ON_SERVER_IF_ENABLED__",
64 + NEXT_PUBLIC_GISCUS_REPOSITORY_ID: "__SET_ON_SERVER_IF_ENABLED__",
65 + NEXT_PUBLIC_GISCUS_CATEGORY: "__SET_ON_SERVER_IF_ENABLED__",
66 + NEXT_PUBLIC_GISCUS_CATEGORY_ID: "__SET_ON_SERVER_IF_ENABLED__",
67 + },
68 +
69 + node_args: [
70 + "--max-old-space-size=2048",
71 + "--max-http-header-size=16384",
72 + ].join(" "),
73 +
74 + kill_timeout: 5000,
75 + wait_ready: false,
76 + listen_timeout: 10000,
77 + shutdown_with_message: false,
78 +
79 + vizion: false,
80 + },
81 + ],
82 +};