Development Workflow
Core Tools
- Editor: Emacs with org-mode, tramp, magit
- Version Control: Git with conventional commits
- Remote Development:
ssh ubuntu
for ROS2/LeRobot work - Deployment: Cloudflare Workers via Wrangler
- Content: org-mode for notes → mayphus.org publishing
Project Lifecycle
Hardware Projects
# New hardware project
mkdir project_name/
cd project_name/
# Create KiCad project
kicad project_name.kicad_pro
# Development cycle
git add . && git commit -m "feat: initial schematic"
# Iterate: schematic → PCB → gerber → review
git commit -m "fix: update power routing"
# Final output
# Generate gerber files for manufacturing
Web Projects
# New web project (use existing as template)
cp -r vocabvibe/ new-project/
cd new-project/
# Setup
npm install
npm run dev # Local development
# Deploy
npx wrangler deploy # To Cloudflare Workers
git commit -m "feat: add new feature"
Content Creation
# Create new note in org/
emacsclient --eval "(denote-create-note)"
# Write content in org-mode
# Content auto-syncs to mayphus.org/content/
# Publish
cd mayphus.org/
npm run build && npx wrangler pages deploy dist/
Git Workflow
Commit Style (Conventional Commits)
feat:
- New featuresfix:
- Bug fixesdocs:
- Documentationrefactor:
- Code refactoringtest:
- Testschore:
- Maintenance
Branch Strategy
main
- Stable, deployable code- Feature branches for larger changes
- Direct commits to main for small fixes
Important: Force push requires explicit approval
Development Environment
Local Setup
# Primary workspace
cd ~/workspaces/
# Emacs as primary editor
emacsclient filename
# Remote development
ssh ubuntu # For ROS2/LeRobot work
Central Tool: Emacs
Emacs serves as my primary interface for:
- Code development across multiple languages
- Note-taking and documentation
- Project management and task tracking
- Email and communication
- File management and system administration
Language and Framework Support
Primary Languages
- Emacs Lisp for editor customization and automation
- JavaScript/Node.js for web development
- C for system-level programming
- Python for automation and data processing
Web Development Stack
- Astro for static site generation
- React for interactive applications
- Cloudflare for hosting and edge computing
- Modern CSS for styling and responsiveness
MCP Integration
emacs-mcp-server/
- Emacs ↔ LLM integrationllm-mcp-server/
- General LLM tooling- Used for code assistance and automation
Project-Specific Workflows
Hardware Design
- Schematic → KiCad electrical design
- PCB Layout → Physical board design
- DRC Check → Design rule verification
- Gerber Export → Manufacturing files
- Assembly → Physical testing
Web Development
- Local Dev →
npm run dev
- Build →
npm run build
- Deploy →
npx wrangler deploy
- Test → Verify in production
Content Publishing
- Write → org-mode files in
org/
- Sync → Content syncs to
mayphus.org/content/
- Build → Astro processes org files
- Deploy → Cloudflare Pages deployment
Quality Assurance
Before Commit
- Hardware: DRC checks pass
- Web: Build succeeds, no TypeScript errors
- Content: org-mode syntax valid
Deployment Checks
- Web projects: Wrangler deployment succeeds
- Hardware: Gerber files generated successfully
- Content: mayphus.org builds and deploys
Automation Opportunities
Current Manual Steps
- Content sync between org/ and mayphus.org/content/
- Hardware project file organization
- Cross-project dependency updates
Potential Improvements
- Automated content sync via git hooks
- Project template scaffolding scripts
- Unified build/deploy commands across projects
Notes Management
All notes stored in org/
using org-mode:
- Descriptive filenames
- Tagged categorization
- Manual linking between notes
- Publishes to https://mayphus.org
Remote Work
Use ssh ubuntu
for:
- ROS2 development
- LeRobot experimentation
- Linux-specific testing
Private Cloud Infrastructure
Hardware Foundation
I use a mini PC as my private cloud server - a compact, energy-efficient solution that provides:
- 24/7 availability for development services
- Local network performance for frequent operations
- Complete control over the environment
- Cost-effective alternative to cloud services
Operating System Choice: FreeBSD
After trying various operating systems, I settled on FreeBSD because:
- Simplicity: Clean, logical system organization
- Stability: Rock-solid reliability for server operations
- Performance: Excellent resource utilization
- Documentation: Superior documentation quality
- Philosophy: Aligns with my systematic approach to technology
Service Architecture with Jails
FreeBSD jails provide the foundation for service isolation:
Jail 1: Development Services
- Git repositories (local mirrors and private repos)
- Build servers for continuous integration
- Development databases (PostgreSQL, Redis)
- Code analysis and documentation tools
Jail 2: Web Services
- Nginx reverse proxy and static file serving
- Application servers for web projects
- SSL certificate management
- Monitoring and logging services
Jail 3: Virtualization Platform
Using bhyve inside jails for:
- Docker Support: Running containerized applications that require Linux
- Kubernetes Clusters: Testing and development environments
- Linux VMs: Supporting tools that don't run natively on FreeBSD
- Experimentation: Safe environments for testing new technologies
This hybrid approach gives me:
- Native FreeBSD performance for core services
- Linux compatibility when needed
- Complete isolation between environments
- Easy backup and migration capabilities
System Administration
Automation Tools
- Ansible for configuration management
- Custom scripts for routine maintenance
- Automated monitoring and alerting
- Performance tracking and optimization
Security Framework
- Doas for privilege escalation
- SSH key management and hardening
- Jail-based isolation for service security
- Regular security updates and monitoring
Storage Management
- ZFS for data integrity and snapshots
- Automated backup strategies
- Efficient storage allocation for different services
- Performance optimization for development workloads
Backup and Disaster Recovery
- ZFS snapshots for point-in-time recovery
- Off-site backup for critical data
- Configuration backup and restoration procedures
- Testing of recovery procedures