David Braun

dbraun.io

Consulting-focused website for David Braun. The site is built to do two things at once without pretending they are the same thing:

Live site: dbraun.io

Current positioning

This is no longer a generic portfolio site.

It is a consulting-capable systems site for workflow automation, system integration, and operational software work, with enough proof and engineering signal to remain credible to hiring managers and technical reviewers.

Current public proof and delivery work:

Current in-progress systems shaping the next proof layer:

Those systems are being positioned as real in-progress builds that will become part of the broader StormIQ direction. They are intentionally not presented as finished or deployed products before the proof exists.

Current proof posture

Latest audit baseline

Stack

Category Technology
Framework Next.js 16
UI React 19
Language TypeScript
Styling Tailwind CSS v4
Motion Framer Motion
Content MDX via next-mdx-remote
Email Resend
Rate limiting Upstash Redis with in-memory fallback
Testing Vitest, Playwright
Deployment Vercel

Local development

Prerequisites

Install and run

git clone https://github.com/DavidBraun777/davidbraun777.github.io.git
cd davidbraun777.github.io
npm install
npm run dev

Open http://localhost:3000.

Environment variables

Create .env.local in the repo root:

# Email configuration (required in production)
RESEND_API_KEY=re_xxxxxxxxxxxxx

# Optional: recipient override for contact form submissions
CONTACT_EMAIL=your-email@example.com

# Optional: secondary scheduling link shown on the contact page
CAL_LINK=https://calendly.com/your-handle/intro-call

# Optional: distributed rate limiting
UPSTASH_REDIS_REST_URL=https://your-instance.upstash.io
UPSTASH_REDIS_REST_TOKEN=your-token

# Optional: GA4 measurement ID override
NEXT_PUBLIC_GA_ID=G-XXXXXXXXXX

Notes:

Validation

Run the full local validation set:

npm run lint
npm test
npm run build
npx playwright test e2e/smoke.spec.ts e2e/a11y.spec.ts --project=chromium

Notes on proof and honesty

This repo intentionally separates:

That constraint matters. The site should get more convincing over time because more real evidence gets added, not because the copy gets more aggressive.