🔐 Restricted Access
This article is private. Enter the password to continue.
Building Health Trend Seller Without a Laptop
Alright, let me be straight with you. Building and executing the Health Trend Seller application without a laptop is going to be challenging. Not impossible – I've been doing it myself – but you need to know exactly what you're up against.
I've been in your shoes. No laptop, but a vision that won't wait. So I figured out the workarounds. Here is a breakdown of the restrictions and limitations I faced, and what I actually did about them.
"A vision that won't wait doesn't need a laptop – it needs a workaround." – Peter M. Mutiti
🚫 The Hard Truth – What I Couldn't Do Without a Laptop
1. I Couldn't Run the Application Locally
| Limitation | What I Experienced |
|---|---|
| No local server | I couldn't run npm run dev or start any of the services (Express, Next.js, PostgreSQL, Temporal, Redis, IPFS) because my phone doesn't have the processing power, memory, or storage. |
| No database | PostgreSQL won't run on a phone. I couldn't store or query data locally. |
| No WebSocket | Real-time chimes require a WebSocket server running locally. Not possible on my phone. |
2. I Couldn't Write or Edit Code Effectively
| Limitation | What I Experienced |
|---|---|
| No code editor | VS Code, WebStorm, or any real IDE requires a desktop. Phone code editors are frustrating for a project this size. |
| No file system | I couldn't create, rename, move, or delete files in bulk the way I needed to. |
| No git operations | Cloning, committing, branching, merging, and pushing to GitHub were extremely difficult on my phone. |
3. I Couldn't Test or Debug
| Limitation | What I Experienced |
|---|---|
| No browser dev tools | I couldn't inspect network requests, debug JavaScript, check console logs, or test API responses. |
| No terminal | I couldn't run git, npm, npx, prisma, or any CLI commands. |
| No error tracing | When something broke (and it did), I couldn't see stack traces or error messages to figure out what went wrong. |
4. I Couldn't Deploy Easily
| Limitation | What I Experienced |
|---|---|
| No build process | I couldn't run npm run build to generate production-ready files. |
| No deployment CLI | Vercel, Netlify, and AWS deployment require a terminal or a desktop. |
| No environment variables | I couldn't set .env files locally or upload them securely. |
😅 What I COULD Do Without a Laptop
| What I Did | How I Did It |
|---|---|
| Planned the architecture | I documented the project structure, API design, database schema, and workflows. I used this chat to help me. |
| Wrote code snippets | I generated components, routes, and functions to copy-paste later. |
| Created mockups | I designed the UI, planned the user flow, and built static HTML previews (like the dashboard you've already seen). |
| Studied the codebase | I read and understood the project code through our conversations. |
| Designed the database schema | I planned tables, relationships, and migrations. |
| Researched | I read documentation, watched tutorials, and learned the technologies (Next.js, Prisma, Temporal, etc.). |
| Hosted code on GitHub | I created the repository. Someone else pushed the code for me. |
🚀 GitHub Codespaces – My Go-To Solution
GitHub Codespaces gives me a full VS Code editor in my browser, a terminal, and the ability to run commands – all without a laptop. It's like having a laptop in the cloud. I use this every day.
What I liked: I could run npm run dev, install dependencies, and test code.
What I didn't like: Limited free tier (60 hours/month). Performance could be slow. Still needed a browser and internet.
🛠️ My Complete Guide to Setting Up GitHub Codespaces
1. Went to github.com
2. Clicked Sign Up
3. Entered my email, created a password, and chose a username
4. Verified my email
2. Clicked the + icon → New repository
3. Named it:
health-trend-seller4. Set it to Private
5. Checked Add a README file
6. Clicked Create repository
2. Clicked the Codespaces tab
3. Clicked Create codespace on main
Wait 1-3 minutes while the cloud environment builds. I used this time to grab coffee. ☕
Once Codespaces opened, I had a VS Code editor in my browser with a terminal at the bottom.
I ran these commands in order:
# Check Node.js is installed
node --version
# Showed v18 or higher – good
# Check npm
npm --version
# Showed v9 or higher – good
# Initialize the project
npm init -y
# Install production dependencies
npm install express @temporalio/client @temporalio/worker ipfs-http-client next react react-dom @prisma/client stripe twilio sendgrid socket.io jsonwebtoken bcrypt dotenv winston helmet cors compression express-rate-limit
# Install development dependencies
npm install -D nodemon jest eslint prettier prisma
# Create the folder structure
mkdir -p src/app src/api/controllers src/api/models src/api/routes src/services src/config immortal-core/temporal-workflows prisma scripts
# Create a basic .gitignore file
echo "node_modules/
.env
.next/
dist/
*.log
.DS_Store" > .gitignore
I created src/index.js (the main entry point).
// src/index.js
const express = require('express');
const cors = require('cors');
const helmet = require('helmet');
const compression = require('compression');
const rateLimit = require('express-rate-limit');
const dotenv = require('dotenv');
const { createClient } = require('@temporalio/client');
dotenv.config();
const app = express();
const PORT = process.env.PORT || 3000;
// Security & performance middleware
app.use(helmet());
app.use(cors());
app.use(compression());
app.use(express.json());
// Rate limiting
const limiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15 minutes
max: 100
});
app.use('/api', limiter);
// Health check
app.get('/health', (req, res) => {
res.json({ status: 'healthy', timestamp: new Date().toISOString() });
});
// API routes (to be expanded)
app.get('/api/v1/trends', (req, res) => {
res.json({
status: 'success',
data: {
trends: [
{ name: 'Wellness Products', score: 87, change: '+23%', confidence: 0.92 },
{ name: 'Mental Health', score: 72, change: '+18%', confidence: 0.85 },
{ name: 'Fitness Tech', score: 34, change: '-5%', confidence: 0.45 },
{ name: 'Supplements', score: 91, change: '+31%', confidence: 0.96 }
]
}
});
});
// Temporal client example (placeholder)
app.get('/api/workflow/start', async (req, res) => {
try {
const client = createClient({
address: process.env.TEMPORAL_ADDRESS || 'localhost:7233'
});
// ... workflow start logic
res.json({ status: 'Workflow triggered' });
} catch (error) {
res.status(500).json({ error: error.message });
}
});
app.listen(PORT, '0.0.0.0', () => {
console.log(`✅ Health Trend Seller running on http://localhost:${PORT}`);
console.log(`🔒 Environment: ${process.env.NODE_ENV || 'development'}`);
});
This is the full, production‑grade package.json that powers the entire Ghost Unit – Immortal Health Intelligence Platform. It includes Temporal workflows, IPFS, Stripe, Twilio, Socket.io, and everything you need for a scalable, real‑time system.
{
"name": "health-trend-seller",
"version": "1.0.0",
"description": "Ghost Unit - Immortal Health Intelligence Platform",
"author": "Health Trend Seller Team",
"license": "GPL-3.0",
"private": true,
"main": "src/index.js",
"scripts": {
"dev": "nodemon src/index.js",
"start": "node src/index.js",
"build": "next build",
"lint": "eslint src/",
"test": "jest",
"test:watch": "jest --watch",
"deploy:wasm": "bash scripts/deploy-wasm.sh",
"worker": "node immortal-core/temporal-workflows/worker.js",
"worker:dev": "nodemon immortal-core/temporal-workflows/worker.js",
"db:migrate": "prisma migrate deploy",
"db:seed": "node prisma/seed.js",
"format": "prettier --write \"src/**/*.js\""
},
"dependencies": {
"express": "^4.18.2",
"@temporalio/client": "^1.8.0",
"@temporalio/worker": "^1.8.0",
"ipfs-http-client": "^60.0.0",
"next": "15.0.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"@prisma/client": "^5.0.0",
"stripe": "^14.0.0",
"twilio": "^4.0.0",
"sendgrid": "^7.7.0",
"socket.io": "^4.6.0",
"jsonwebtoken": "^9.0.0",
"bcrypt": "^5.1.0",
"dotenv": "^16.0.0",
"winston": "^3.9.0",
"helmet": "^7.0.0",
"cors": "^2.8.5",
"compression": "^1.7.4",
"express-rate-limit": "^6.7.0"
},
"devDependencies": {
"nodemon": "^3.0.0",
"jest": "^29.0.0",
"eslint": "^8.0.0",
"prettier": "^3.0.0",
"prisma": "^5.0.0"
},
"engines": {
"node": ">=18.0.0",
"npm": ">=9.0.0"
},
"keywords": [
"healthcare",
"trend-detection",
"ai",
"temporal",
"ipfs",
"ghost-unit"
]
}
In the Codespaces terminal:
npm run dev
I waited for: "✅ Health Trend Seller running on http://localhost:3000"
1. In Codespaces, a popup appeared saying "Your application running on port 3000 is available."
2. I clicked Open in Browser
3. My API was running!
I tested these URLs:
http://localhost:3000/health→ Shows health statushttp://localhost:3000/api/v1/trends→ Shows trend data
git add .
git commit -m "Initial setup: Full stack with Temporal, IPFS, Prisma, and Express"
git push origin main
⚠️ Codespaces Limitations – What I Learned
| Limitation | What I Did |
|---|---|
| Free tier limit | 60 hours per month on the free plan. I use wisely and stop the server when not working. |
| No persistent storage | Codespaces spins down after inactivity. I always commit and push changes. |
| No PostgreSQL | I use a cloud database (Supabase / Neon). Configured via .env. |
| No Redis | I use Upstash (serverless Redis) for caching and real-time pub/sub. |
| Temporal & IPFS | I connect to Temporal Cloud and Pinata / Infura IPFS gateways. No need to run them locally. |
If Codespaces is full, I use GitPod (free 50 hours/month):
- Go to gitpod.io
- Log in with GitHub
- Enter my repository URL
- Click Continue
It works the same way as Codespaces.
📱 Termux on Android – My Fallback Guide
I use this when I can't access Codespaces. It's powerful but limited. Codespaces is always my first choice.
2. Searched for Termux
3. Installed the official app (by Fredrik Fornwall)
4. Opened Termux
Important: If Termux is not available in your country, download the APK from f-droid.org
pkg update && pkg upgrade -y
Typed y when prompted.
pkg install nodejs -y
Checked installation:
node --version
# Showed v18 or higher – good
npm --version
# Showed v9 or higher – good
pkg install git -y
pkg install nano -y # Text editor
pkg install curl -y # For API testing
pkg install wget -y # For downloading files
git clone https://github.com/YOUR_USERNAME/health-trend-seller.git
cd health-trend-seller
Replace YOUR_USERNAME with your actual GitHub username.
npm install
This took 2-5 minutes depending on internet speed.
mkdir -p src/app src/api/controllers src/api/models src/api/routes src/services src/config immortal-core/temporal-workflows prisma scripts
nano src/index.js
I copied and pasted the full server code from Step 5 above.
Save: Press Ctrl + X, then Y, then Enter.
I replaced the default package.json with the complete production config from Step 6.
Save: Press Ctrl + X, then Y, then Enter.
npm install -g nodemon
npm run dev
I saw:
✅ Health Trend Seller running on http://localhost:3000
🔒 Environment: development
I opened another Termux session (swiped from the left edge and tapped "New session") and used curl:
curl http://localhost:3000/health
I saw:
{"status":"healthy","timestamp":"2026-..."}
⚠️ Termux Limitations – What I Discovered
| Limitation | What I Did |
|---|---|
| No port forwarding | I couldn't access my app from another device. Only localhost. |
| No browser dev tools | I couldn't inspect network requests or debug JavaScript easily. |
| Limited storage | My phone storage was limited. I kept node_modules clean. |
| Battery drain | Running servers drained my battery quickly. I used a charger. |
| No PostgreSQL / Redis / Temporal locally | I used cloud services: Supabase (PostgreSQL), Upstash (Redis), Temporal Cloud. |
| No Docker | Termux does not support Docker. I built and deployed via GitHub Actions / Vercel. |
✅ What I CAN Do on Termux
| Activity | Status |
|---|---|
| Write code | ✅ Yes |
| Run Express server | ✅ Yes |
| Test API endpoints | ✅ Yes |
| Push to GitHub | ✅ Yes |
| Install npm packages | ✅ Yes |
| Edit files | ✅ Yes (with nano or vim) |
| Run basic Node.js apps | ✅ Yes |
🔑 My Pro Tips for Termux
termux-setup-storage
Android will ask you automatically. Tap Allow.
pkg install vim -y
npm run dev &
ps aux
kill <PID>
📋 Summary: Which Option Should You Use?
🚀 My Next Steps
- I use Codespaces as my primary platform
- I've set up the full stack using the complete
package.jsonabove - I'm building the Temporal Worker for durable background workflows
- I'll connect to cloud services (Supabase, Upstash, Temporal Cloud, Pinata IPFS)
- I'll deploy to Vercel / Render – I can do this directly from Codespaces
Peter M. Mutiti – Lead Engineer, Health Trend Seller Project
Building the future of health trend intelligence, one line of code at a time.
No comments:
Post a Comment