The public BlueDot IT website. It presents security engineering, AI automation, and full-stack application development while retaining technical insights, selected public work, account features, and admin tooling.
Table of contents
- About
- Features
- Tech stack
- Demo / Screenshots
- Quick start (local)
- Environment variables
- Database & Prisma
- Admin panel
- Available scripts
- Deployment
- Project structure
- Contributing & tests
- Suggested improvements
- License
BlueDot IT is a remote technical consultancy and development studio operated by Jason O'Neal. The site communicates three connected capabilities: security engineering, AI automation and agent systems, and full-stack application development. It also provides a technical insights platform, selected public work, a security posture page, and an admin panel for content management.
Features include:
- Clean, responsive website layout optimized for desktop and mobile
- Selected public work across AI systems, security engineering, and technical evaluation
- Insights with Markdown/MDX support and SEO-friendly routes (/blog/[slug])
- Public security posture and structured About page
- Admin panel for creating and managing blog posts and projects
- SEO-first setup: comprehensive metadata, sitemap, robots, and JSON-LD
- PWA manifest and basic offline support
- TypeScript-first codebase with linting and tooling to maintain quality
The framework:
- Next.js 15 (App Router)
- React + TypeScript
- Tailwind CSS
- Framer Motion (animations)
- Radix UI (accessible primitives)
- NextAuth.js (authentication)
- Prisma ORM + MySQL
- ESLint, PostCSS
- Vercel for hosted deployments (supported)
- PM2 for self-hosted process management
See it live:
Requirements
- Node.js 20.9+
- MySQL (local or remote)
- npm, yarn, or pnpm
-
Clone
git clone https://github.com/BlueDot-IT/bluedot-website.git cd bluedot-website -
Install
npm install # or yarn install # or pnpm install
-
Environment
Create
.env.local(copy from.env.exampleif present) and set required variables (see next section). -
Database & Prisma
npx prisma generate npx prisma migrate dev --name init npx prisma db seed # if a seed script exists -
Start dev server
npm run dev # or yarn dev # or pnpm dev
Create .env.local with the following values (example values shown — do not commit secrets):
DATABASE_URL="mysql://user:password@localhost:3306/bluedot"
NEXTAUTH_URL="http://localhost:3000"
NEXTAUTH_SECRET="your-nextauth-secret"
ADMIN_EMAIL="admin@example.com"
ADMIN_EMAILS="admin@example.com,security@example.com"
ADMIN_USER="admin"
ADMIN_PASS="secure-password"
ALLOW_PUBLIC_REGISTRATION="false"
RATE_LIMIT_IP_HEADER="x-forwarded-for"
# Add any NEXT_PUBLIC_ keys or third-party API keys as required
Copy .env.example and replace every placeholder. Admin authorization fails
closed unless the signed-in email appears in ADMIN_EMAIL or
ADMIN_EMAILS. Public registration remains disabled unless
ALLOW_PUBLIC_REGISTRATION=true; allowlisted administrator addresses can never
self-register. Production requests fail closed unless RATE_LIMIT_IP_HEADER
identifies a header controlled by a trusted reverse proxy. Rate-limit counters
are stored atomically in MySQL, so npx prisma migrate deploy must run before
the hardened application is started.
- Prisma schema lives in
prisma/(ensureschema.prismais committed). - Typical workflow:
npx prisma generatenpx prisma migrate dev(local migrations)npx prisma db seed(if seed script exists)
- Confirm models for posts, projects, users, comments, and shared rate-limit buckets are present and documented.
- Admin UI available at
/admin - Admin accounts authenticate through NextAuth and must also match the
ADMIN_EMAIL/ADMIN_EMAILSallowlist. There are no default credentials. - Admin features: create/edit blog posts and projects, moderate comments, manage metadata
npm run dev— start dev servernpm run build— build for productionnpm run start— start production servernpm run lint— run ESLintnpm run typecheck— run the TypeScript compiler without emitting filesnpm test— run security regression testsnpm run audit:prod— fail on high/critical production dependency advisories- Prisma helpers:
npx prisma studionpx prisma migratenpx prisma generate
Vercel (recommended)
- Connect the repo to Vercel and set environment variables in project settings.
- Vercel will run
npm run buildand deploy the site.
Self-host (PM2)
-
Build
npm run build
-
Start with PM2
pm2 start ecosystem.config.js
-
Run migrations:
npx prisma migrate deploy
Top-level (simplified)
bluedot-website/
├── src/
│ ├── app/ # Next.js App Router pages
│ ├── components/ # UI components
│ └── lib/ # utilities and configs
├── prisma/ # schema, migrations, seed
├── public/ # static assets and images
├── package.json
├── next.config.ts
├── tailwind.config.ts
└── README.md
- Add a
CONTRIBUTING.mdto document the development workflow, code style, and PR guidelines. - Add Github Actions for linting and build checks (CI).
- Consider adding unit/integration tests for critical components and API routes.
This project is licensed under the MIT License. See the LICENSE file for details.
- Site: https://bluedot.it.com
- GitHub: https://github.com/jason-allen-oneal
- Email: jason@bluedot.it.com