Skip to content
Matanza00Public

About

NXCSOL

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

NXCSOL website

The website for nxcsol.com. NXCSOL LLC is a software development company in Kalispell, Montana, building SaaS platforms, Three.js 3D websites, custom business software, iOS and Android apps, Claude Code skills and 3D renders in Blender.

Every page is prerendered HTML, so search engines and slow phones get it straight away. A small set of serverless functions adds the live features: a chat and voice agent, a project planner, a privacy-friendly heatmap and an owner dashboard. There is no framework and no build step to deploy.

This repository began in 2023 as a Create React App site. This version replaced it in November 2026. The old site is still in the history, at commit dfc0a68.

What's in the site

  • 11 case studies, under /work/
  • 7 service pages, under /services/, including AI and workflow automation
  • The HRMS product page, at /products/hrms/
  • 6 guides and tutorials, plus videos, under /guides/
  • Claude skills, about, contact with the project planner, the Kalispell page, and links
  • A sitemap, robots.txt, llms.txt, a web manifest and a share image for each page

Project layout

Path What it holds
public/ The site Vercel serves: pages, assets/ (CSS, JavaScript, fonts), media/ (case study images and video), og/ (share images)
api/ Vercel functions: chat, lead, track, admin, health
edge/ The Cloudflare Worker: chat, lead, health
lib/ Shared server code, plus knowledge.txt (the facts the agent answers from) and paths.json (the pages the heatmap accepts)
db/schema.sql The database tables. Safe to run more than once
scripts/ The local server and the database setup script

Run locally

You need Node.js 22.9 or newer.

npm install
npm run dev

Open the address the terminal prints. It's http://localhost:3000 unless another app is using that port, in which case the server moves to the next free one. To choose a port yourself, set PORT.

No configuration is needed. Without DATABASE_URL, the server starts an in-memory database, so anything you record is lost on restart. The dashboard is at /admin/, and the terminal prints its local password.

To turn on more features, copy .env.example to .env and fill in the values below. .env is ignored by Git. Never commit real values.

Live features

Feature Needs Without it
Chat and voice agent GEMINI_API_KEY or ANTHROPIC_API_KEY Answers come from the site's own search index
Planner's Send button DATABASE_URL, or RESEND_API_KEY and LEAD_EMAIL The planner only opens WhatsApp
Email for each new brief RESEND_API_KEY, LEAD_EMAIL Briefs stay in the dashboard
Heatmap, saved leads and chats DATABASE_URL Nothing is stored
Dashboard at /admin/ DATABASE_URL, ADMIN_TOKEN (at least 24 characters) Not available

Gemini is used when its key is set, otherwise Claude. tawk.to provides live chat and the new-visitor alert, and its script needs no variables.

Three optional variables:

  • CHAT_MODEL changes the agent's model. The default is gemini-3.5-flash-lite with Gemini, or claude-opus-5-5 with Claude.
  • EMAIL_FROM sets the sender for brief emails.
  • RATE_SALT is random text used when hashing visitor addresses for rate limits. Set your own in production.

Deploy to Cloudflare (production)

nxcsol.com runs on Cloudflare Workers and deploys on every push to master. wrangler.jsonc serves public/ as static files and sends only /api/* to edge/worker.js.

Add these under Settings > Variables and Secrets on the Worker: GEMINI_API_KEY, RESEND_API_KEY and optionally LEAD_EMAIL, which defaults to hello@nxcsol.com. The Worker runs the chat agent on Gemini and sends briefs by email. The heatmap, saved leads and the dashboard need a database, so they only run on Vercel.

To check a deployment, open /api/health. agent and lead show whether the keys are in place.

Deploy to Vercel (staging)

  1. Import this repository in Vercel, or run npx vercel here. vercel.json already sets the output folder and cache headers.

  2. Add the variables above under Settings > Environment Variables.

  3. Create the tables once, using the direct (non-pooled) connection string:

    DATABASE_URL=... npm run db:setup
  4. Set DATABASE_URL in Vercel to the pooled connection string.

Only nxcsol.com is open to search engines. vercel.json sends a noindex header on every other host, including staging and previews.

Updating the site

public/, lib/knowledge.txt and lib/paths.json are generated by a build script that is not in this repository. Change content in the generator, not here, because a hand edit is lost the next time its output is copied in.

To publish a new build, copy the generator's output over this folder and commit it. Keep this README, because the generator writes its own.

Privacy

The heatmap stores the page, device type, click position and scroll depth. It sets no cookies, stores no IP address and reads no text from the page, and it stays off for visitors who send Global Privacy Control or Do Not Track.

Chats and briefs are stored when a database is set up, and the chat panel says so. Rate limits keep only a salted hash of the visitor's address, for a day. Voice input uses the browser's own speech service.

On Google's free tier, Google may use chat messages to improve its products, and the chat panel says that when Gemini is on. tawk.to is a third-party service that loads after the page and stays off for visitors who send Global Privacy Control or Do Not Track.

Author

Made by Usman Nadeem. Questions: hello@nxcsol.com.

About

NXCSOL

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages