Hero
- Tightened H1 to a benefit-led, audience-first value prop
("Custom Software That Powers Enterprises & Governments")
- Replaced generic subhead with a ~135-char outcome line that names
the audience (startups, enterprises, government bodies)
- Swapped primary CTA copy to an action verb ("Get a free consultation")
and secondary to "See our work"; added source query params + data-cta
hooks so analytics can attribute CTA clicks
- Added a micro-trust line under the CTAs (free 30-min call, reply within
1 business day, no commitment)
Social proof
- New ClientLogos.astro component rendered below the hero. Grayscale
strip with hover pop, image+wordmark fallback, TODO documenting the
five required SVG assets in public/images/clients/
- Default roster sourced from the live portfolio (PLNR, RENTEC, IIT
Patna, MOC Soft Technologies, Govt. of Bihar)
- Existing testimonials carousel left intact (3 quotes with name/role)
Services preview
- Reframed the 4 cards around outcome headlines and added deep links
to /services#<slug> for each service detail section
- Renamed "Learn More" to "Learn more" and made it a real <a> link
with aria-label for screen readers
Final CTA band
- New conversion-focused headline ("Ready to ship your next production
system?") and a one-line offer with explicit response SLA
- Added a "what you'll get" reassurance row (discovery call, fixed-price
scope, NDA on request)
- Primary CTA now "Get my free consultation" with source attribution;
secondary "See case studies" preserved
- Process-section CTA renamed to "Book a discovery call" and tagged
SEO
- Updated meta description on BaseLayout invocation to match the new
positioning; FAQPage schema and existing structured data untouched
Astro SSR Standalone Server
An Astro-based web application configured for server-side rendering (SSR) with standalone Node.js deployment.
Quick Start
Development
npm install
npm run dev
The development server will start at http://localhost:4321
Production
npm run build
npm start
The production server will start at http://0.0.0.0:10000
Deployment
This application is configured for standalone Node.js deployment with SSR enabled.
📋 Domain Migration Documentation
- Quick Deploy:
QUICK-DEPLOY.md- Fast deployment reference for DevOps- Full Checklist:
DOMAIN-MIGRATION-CHECKLIST.md- Complete deployment checklist- Migration Summary:
MIGRATION-SUMMARY.md- Executive summary of changes- Deployment Guide:
DEPLOYMENT.md- General deployment instructions
Build Process
Build the application for production:
npm run build
This command:
- Compiles the Astro application with SSR enabled
- Generates a standalone Node.js server in the
dist/directory - Creates the server entry point at
dist/entry.mjs - Optimizes assets for production
Running the Server
Start the standalone Node server:
npm start
The server will:
- Bind to
0.0.0.0(accessible from all network interfaces) - Listen on port
10000by default - Serve server-side rendered pages with full SSR functionality
Environment Configuration
Environment variables can be configured using a .env file. See .env.example for available options:
| Variable | Description | Default |
|---|---|---|
| HOST | Server bind address. Use 0.0.0.0 for deployment (all interfaces) or localhost for local dev |
0.0.0.0 |
| PORT | Server port. Can be overridden by platform (e.g., Heroku, Railway) | 10000 |
| NODE_ENV | Runtime environment (production, development, test) |
production |
Example Configuration
For production deployment:
HOST=0.0.0.0
PORT=10000
NODE_ENV=production
For local development:
HOST=localhost
PORT=3000
NODE_ENV=development
Available Scripts
| Command | Description |
|---|---|
npm run dev |
Start development server with hot reload |
npm run build |
Build for production with SSR |
npm start |
Run production server |
npm run preview |
Preview production build locally |
npm run clean |
Remove build artifacts |
npm run prod |
Full production build and start |
Architecture
SSR Configuration
The application uses:
- Output mode:
server(full SSR) - Adapter:
@astro/nodein standalone mode - Server runtime: Node.js standalone server
This configuration ensures:
- Server-side rendering for all pages
- SEO optimization with pre-rendered HTML
- Dynamic content support
- No external dependencies for deployment
Server Entry Point
The standalone server is located at server.mjs and configures:
- Host binding to
0.0.0.0for deployment accessibility - Port
10000with environment variable override support - Production-ready server setup
Deployment Platforms
Generic Node.js Platforms
Compatible with any platform that supports Node.js:
-
Build the application:
npm run build -
Set environment variables (if needed):
export HOST=0.0.0.0 export PORT=10000 export NODE_ENV=production -
Start the server:
npm start
Platform-Specific Notes
Railway / Render / Fly.io:
- These platforms automatically set the
PORTenvironment variable - The server will use the platform's provided port
- Ensure
npm startis set as the start command
Heroku:
- Uses the
PORTenvironment variable automatically - Add
node_modulesto.gitignore(already configured) - Ensure
package.jsonhas"engines"field for Node version
Docker:
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --production
COPY . .
RUN npm run build
EXPOSE 10000
CMD ["npm", "start"]
Project Structure
.
├── src/
│ ├── pages/ # Astro pages (SSR routes)
│ ├── layouts/ # Page layouts
│ └── components/ # Reusable components
├── public/ # Static assets
├── dist/ # Production build output
│ └── entry.mjs # Server entry point
├── server.mjs # Standalone server configuration
├── astro.config.mjs # Astro configuration
├── .env.example # Environment variables template
└── package.json # Project dependencies and scripts
Features
- Server-Side Rendering (SSR): Full SSR support for dynamic content and SEO
- Standalone Deployment: Self-contained Node.js server with no external dependencies
- Environment Configuration: Flexible configuration via environment variables
- Production-Ready: Optimized build with asset optimization and performance tuning
- SEO Optimized: Meta tags, Open Graph, and structured data support
- Performance Optimized: Image optimization with WebP, lazy loading, and asset optimization
Troubleshooting
Port Already in Use
If you see EADDRINUSE error:
# Windows
netstat -ano | findstr :10000
taskkill /PID <PID> /F
# Linux/Mac
lsof -ti:10000 | xargs kill -9
Server Not Accessible
Ensure the server is bound to 0.0.0.0 (not localhost) for external access:
HOST=0.0.0.0
Build Failures
Clear the build cache and rebuild:
npm run clean
npm run build
License
MIT