platform-mcp a4505635e1
E2E Test Suite / Form Interaction Tests (push) Failing after 10m19s
E2E Test Suite / Security Header Tests (push) Failing after 10m5s
E2E Test Suite / Mobile Device Tests (push) Failing after 10m58s
E2E Test Suite / Cross-Browser Regression (webkit) (push) Failing after 11m50s
E2E Test Suite / Cross-Browser Regression (firefox) (push) Failing after 12m43s
E2E Test Suite / Cross-Browser Regression (chromium) (push) Failing after 13m35s
E2E Test Suite / Destructive & Chaos Tests (push) Failing after 14m27s
Ping Search Engines / Notify Search Engines (push) Failing after 14m11s
E2E Test Suite / Smoke Tests (P0) (push) Failing after 21m12s
E2E Test Suite / Critical User Journeys (push) Has been skipped
E2E Test Suite / API Integration Tests (push) Has been skipped
E2E Test Suite / Test Report Summary (push) Has been cancelled
Deploy to Production / Build & Verify (push) Blocked by required conditions
Deploy to Production / Pre-Deploy Tests (push) Blocked by required conditions
Deploy to Production / Deploy to Railway (push) Blocked by required conditions
Deploy to Production / Deploy to Render (push) Blocked by required conditions
Deploy to Production / Deploy to VPS (PM2) (push) Blocked by required conditions
Deploy to Production / Deploy to Fly.io (push) Blocked by required conditions
Deploy to Production / Post-Deploy Verification (push) Blocked by required conditions
Deploy to Production / Notify on Failure (push) Has been cancelled
feat: add inline lead form to homepage
Mounts a 3-field lead-capture form (name, email-or-phone, project type)
between the FAQ/tech-stack block and the final CTA band so visitors who
are ready to start a project can submit without leaving the homepage.
Cuts the friction step of routing every CTA through /contact.

- New src/components/InlineLeadForm.astro:
  * Heading, micro-trust subhead, honeypot, client-side validation
  * Smart contact-field routing: detects email vs phone and synthesises
    a placeholder email for phone-only leads so the existing /api/contact
    validator accepts them (the real phone is preserved and surfaced in
    the admin notification)
  * In-place success state with phone + WhatsApp fallbacks; no navigation
  * 48px touch targets, dark-mode safe, autocomplete + inputmode attrs
- src/pages/api/contact.ts: accept and surface `source` / `projectType`
  metadata (allowlisted source values, free-text projectType capped at
  80 chars), add `erp-solutions` and `government-systems` subject codes,
  and include the source/project info in both the admin email and logs.
- src/pages/index.astro: import + mount InlineLeadForm above the final
  CTA section.
- tests/inline-lead-form.spec.ts: 8 specs covering UI render, mobile
  attributes, blank-field validation, email-submit + phone-submit
  payload routing, and server-side acceptance of the new payload shape,
  new subjects, and unknown-source fallback.
2026-06-17 11:49:47 +05:30
2026-03-21 16:46:46 +05:30
2026-03-22 14:37:17 +05:30
2026-03-21 16:46:46 +05:30
2026-03-22 14:37:17 +05:30
2026-03-21 16:46:46 +05:30
2026-03-21 16:46:46 +05:30
2026-03-21 16:46:46 +05:30
2026-03-21 16:46:46 +05:30
2026-03-21 16:46:46 +05:30
2026-03-21 16:46:46 +05:30
2026-03-21 16:46:46 +05:30

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

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 10000 by 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/node in 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.0 for deployment accessibility
  • Port 10000 with environment variable override support
  • Production-ready server setup

Deployment Platforms

Generic Node.js Platforms

Compatible with any platform that supports Node.js:

  1. Build the application:

    npm run build
    
  2. Set environment variables (if needed):

    export HOST=0.0.0.0
    export PORT=10000
    export NODE_ENV=production
    
  3. Start the server:

    npm start
    

Platform-Specific Notes

Railway / Render / Fly.io:

  • These platforms automatically set the PORT environment variable
  • The server will use the platform's provided port
  • Ensure npm start is set as the start command

Heroku:

  • Uses the PORT environment variable automatically
  • Add node_modules to .gitignore (already configured)
  • Ensure package.json has "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

S
Description
No description provided
Readme
21 MiB
Languages
Astro 38.9%
HTML 27.9%
TypeScript 24.7%
JavaScript 3.5%
CSS 2.2%
Other 2.8%