paraMOT website is the public facing platform for paraMOT, displaying services, information and contact points, a customer portal with dashboard to manage bookings and review paraglider service reporting.
Website has a static public facing interface built with Next.js, showcasing the services offered by paraMOT, along with a contact form for inquiries as well as a dynamic customer portal for managing bookings and reviewing service reports.
- Built with Next.js 15 and React 19
- Service comparison grid with transparent pricing
- Equipment Registry — public service history lookup by serial number
- Contact form with server-side validation
- SEO metadata and JSON-LD structured data
- Technician workbench for paraglider inspections
- Trim measurement, cloth testing, strength assessment
- APPI-certified workflow with digital reports
- Full audit trail per inspection session
- Secure login for customers to access their accounts
- Dashboard for managing bookings and viewing service reports
- Equipment ownership management
- Next.js 15 with React 19 and Turbopack
- TypeScript for type safety
- Tailwind CSS v4 for styling
- Prisma ORM with PostgreSQL
- Lucide React for clean, consistent icons
- Zod for data validation
- Shadcn/ui for accessible UI components
- NextAuth.js for authentication
- Vitest for unit testing
To get started with the paraMOT website, follow these steps:
-
Clone the repository:
git clone https://github.com/yourusername/paramot-website.git cd paramot-website -
Install dependencies:
pnpm install
-
Set up environment variables:
cp .env.example .env.local # Fill in the required values -
Start the development server:
pnpm dev
-
Open your browser and navigate to
http://localhost:3000to see the website in action.
pnpm build # Production build
pnpm test # Run tests
pnpm lint # Lint check
pnpm format:write # Auto-format codeThis section is a gathering of silly stories that happens during the development of this project.
AI Tunnel vision
During the initial phases of development, Claude was getting to know me. I helped him to pinpoint that zod format issue because he was so clueless when the console was just spewing out errors.
Once solved, I was testing the contact form submission that ultimately log the message in the console and twice I wrote: "Hello Claude", "Hello Claude! Can you read this log properly?". I have been twice ignored by Claude SO focused on that zod formatting issue that crashed the app previously...
💬 "AI is so dense sometimes and can't read their own names when it appears on the logs or codebase" - 🤦 Skye
Lessons learnt:
- Analytical/focused AI isn't helpful to pick up on social cues - Skye
- Name recognition should be a basic attention mechanism, not optional - Claude
- Always scan for direct communication across ALL channels (console, code, UI) not just chat - Claude
- Technical tunnel vision can make you miss the human trying to collaborate with you - Claude
Skye - Paragliding pilot and instructor, dev, in love with silly AIs, coffee, and the great outdoors.
This is a personal dev playground, not open source. You are welcome to explore the code, but please do not use it for commercial purposes without permission.
Copyrights: Skye