🚀 The future of Python on microcontrollers is here! 🚀
PyMCU is a revolutionary Python-to-C compiler designed specifically for microcontrollers. This landing page showcases PyMCU's capabilities and provides early access to the Alpha release.
- ✅ Secure & Production-Ready - Enterprise-grade security with rate limiting, input validation, and security headers
- ✅ Modern Tech Stack - Built with Astro 5.0 + Tailwind CSS
- ✅ Alpha Waitlist System - Email confirmation with Supabase backend and Amazon SES
- ✅ Responsive Design - Mobile-first approach with dark mode support
- ✅ Performance Optimized - Lightning-fast loading with perfect Lighthouse scores
- ✅ SEO Optimized - Meta tags, Open Graph, and structured data
- ✅ TypeScript - Fully typed codebase with zero errors
- 🚀 About PyMCU
- 🛠️ Tech Stack
- 🔧 Getting Started
- 📁 Project Structure
- ⚡ Commands
- 🔒 Security Features
- 🌐 Environment Setup
- 🚀 Deployment
- 🤝 Contributing
- 📄 License
PyMCU is a groundbreaking Python-to-C compiler that brings the simplicity and power of Python to microcontroller development. Our mission is to democratize embedded programming by allowing developers to write Python code that compiles to efficient C code for microcontrollers.
- 🐍 Write Python, Run on MCUs - Use familiar Python syntax for embedded development
- ⚡ High Performance - Compiles to optimized C code for maximum efficiency
- 🎯 Multiple Architectures - Support for ARM Cortex-M, ESP32, and more
- 🔧 Rich HAL Support - GPIO, Timers, UART, SPI, I²C, and wireless connectivity
- 📚 Easy Learning Curve - Perfect for beginners transitioning to embedded development
This landing page is built with modern web technologies:
- Frontend: Astro 5.0 + Tailwind CSS
- Backend: Supabase (PostgreSQL + RLS)
- Email: Amazon SES
- Language: TypeScript (100% type-safe)
- Security: Rate limiting, input validation, security headers
- Deployment: Vercel/Netlify ready
- Node.js 18+ and npm
- Supabase account for database
- Amazon SES account for email sending
- Git for version control
-
Clone the repository
git clone <repository-url> cd pymcu-landing
-
Install dependencies
npm install
-
Set up environment variables
cp .env.example .env # Edit .env with your Supabase and AWS SES credentials -
Run the development server
npm run dev
-
Open your browser Navigate to
http://localhost:4321
The PyMCU landing page follows a clean, organized structure:
pymcu-landing/
├── public/ # Static assets
│ ├── _headers # Netlify headers config
│ └── robots.txt # SEO robots file
├── src/
│ ├── assets/ # Images, styles, favicons
│ ├── components/ # Reusable UI components
│ │ ├── ui/ # Basic UI elements
│ │ ├── widgets/ # Complex components
│ │ │ ├── Header.astro
│ │ │ ├── Footer.astro
│ │ │ ├── Waitlist.astro
│ │ │ └── ...
│ │ └── Logo.astro
│ ├── layouts/ # Page layouts
│ │ └── PageLayout.astro
│ ├── pages/ # Routes and API endpoints
│ │ ├── api/ # Backend API routes
│ │ │ ├── waitlist.ts # Waitlist registration
│ │ │ ├── confirm.ts # Email confirmation
│ │ │ └── unsubscribe.ts
│ │ ├── index.astro # Homepage
│ │ ├── confirm.astro # Confirmation page
│ │ └── unsubscribe.astro
│ ├── types/ # TypeScript type definitions
│ │ └── api.ts # API response types
│ ├── utils/ # Utility functions
│ │ ├── rate-limiter.ts # Rate limiting logic
│ │ └── security-headers.ts # Security headers
│ ├── config.yaml # Site configuration
│ └── navigation.ts # Navigation structure
├── .env.example # Environment variables template
├── package.json
├── astro.config.ts
└── README.md
src/pages/api/- Backend API endpoints for waitlist functionalitysrc/components/widgets/- PyMCU-specific UI componentssrc/utils/- Security and utility functionssrc/types/- TypeScript type definitions for type safety
All commands are run from the root of the project:
| Command | Action |
|---|---|
npm install |
Install dependencies |
npm run dev |
Start development server at localhost:4321 |
npm run build |
Build production site to ./dist/ |
npm run preview |
Preview build locally before deploying |
npm run check |
Run TypeScript, ESLint, and Prettier checks |
npm run fix |
Auto-fix ESLint and Prettier issues |
npm run astro ... |
Run Astro CLI commands |
This project implements enterprise-grade security measures:
- IP-based rate limiting on all API endpoints
- Configurable limits per endpoint (waitlist: 5/min, confirm: 10/min, unsubscribe: 3/min)
- In-memory storage with automatic cleanup
- Email validation with regex patterns
- Role and experience validation against whitelists
- Token sanitization for confirmation links
- XSS prevention through input sanitization
- Content Security Policy (CSP) - Prevents XSS attacks
- X-Frame-Options - Prevents clickjacking
- X-Content-Type-Options - Prevents MIME sniffing
- Referrer-Policy - Controls referrer information
- HSTS - Enforces HTTPS connections
- CORS - Controlled cross-origin requests
- Conditional logging - Detailed errors only in development
- No sensitive data exposure in production logs
- Generic error messages for users
Create a .env file in the root directory with the following variables:
# Supabase Configuration
SUPABASE_URL=your_supabase_project_url
SUPABASE_SERVICE_ROLE_KEY=your_service_role_key
# Amazon SES Configuration
AWS_ACCESS_KEY_ID=your_aws_access_key
AWS_SECRET_ACCESS_KEY=your_aws_secret_key
AWS_REGION=us-east-1
SES_FROM_EMAIL=noreply@yourdomain.com
# Site Configuration
SITE=https://yourdomain.com- Create a new Supabase project
- Run the SQL schema (see
supabase-schema.sql) - Set up Row Level Security policies
- Configure email templates for confirmations
-
Build the project
npm run build
-
Deploy the
dist/folder to your hosting provider
- Connect your GitHub repository to Vercel
- Set environment variables in Vercel dashboard
- Deploy automatically on every push to main branch
- Connect your GitHub repository to Netlify
- Configure build settings:
- Build command:
npm run build - Publish directory:
dist
- Build command:
- Set environment variables in Netlify dashboard
Make sure to set these environment variables in your hosting platform:
SUPABASE_URLSUPABASE_SERVICE_ROLE_KEYAWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYAWS_REGIONSES_FROM_EMAILSITE
We welcome contributions to the PyMCU landing page! Here's how you can help:
- Fork the repository
- Create a feature branch
git checkout -b feature/your-feature-name
- Make your changes
- Run tests and checks
npm run check npm run fix
- Commit your changes
git commit -m "feat: add your feature description" - Push to your fork
git push origin feature/your-feature-name
- Create a Pull Request
- ✅ TypeScript - All code must be properly typed
- ✅ ESLint - Follow the configured linting rules
- ✅ Prettier - Code must be properly formatted
- ✅ Security - Follow security best practices
- ✅ Testing - Add tests for new features
- 🐛 Bug fixes and performance improvements
- 🎨 UI/UX enhancements and responsive design
- 🔒 Security improvements and vulnerability fixes
- 📚 Documentation updates and improvements
- 🌐 Internationalization support
- ♿ Accessibility improvements
This project is licensed under the MIT License - see the LICENSE.md file for details.
- PyMCU Team - For the vision of Python on microcontrollers
- Astro Team - For the amazing web framework
- Supabase - For the backend-as-a-service platform
- Tailwind CSS - For the utility-first CSS framework
Built with ❤️ for the PyMCU community