A personal website and digital garden built with vanilla HTML, CSS, and JavaScript. This project emphasizes simplicity, accessibility, and personal ownership of content in an age of platform dependency.
- Clean, minimalist design with focus on readability and accessibility
- Dark/light theme toggle with system preference detection
- Tag-based filtering for blog posts and content organization
- Responsive design that works across all device sizes
- Zero tracking - no analytics, cookies, or user data collection
- Fast loading with minimal dependencies
- SEO optimized with proper meta tags and semantic HTML
- Accessible with ARIA labels and semantic markup
david.computer/
├── index.html # Homepage
├── styles.css # Main stylesheet with CSS variables
├── script.js # Theme toggle and tag filtering
├── updates/ # Blog posts and updates
│ ├── index.html # Updates archive
│ ├── hello-world.html # Individual blog posts
│ ...
├── projects/ # Project case studies
│ ├── index.html # Projects archive
│ ├── photos-redesign.html # Individual project pages
│ ...
├── events/ # Exhibitions and events
│ ├── index.html # Events archive
│ ├── hoja-al-viento.html # Individual event pages
│ └── milagro-coffee-exhibition.html
├── six-questions/ # Personal philosophy pages
│ ├── who/index.html # About page
│ ├── what/index.html # Skills and work
│ ├── why/index.html # Philosophy and motivation
│ ...
└── assets/ # Icons, images, and static files
The site uses a CSS variable-based design system for easy customization:
- Light mode: Cream background (
#fffef1
) with dark text - Dark mode: Pure black background with light text
- Minimal color palette focusing on readability
- Headers: Roboto Mono (monospace)
- Body text: Atkinson Hyperlegible (accessibility-focused sans-serif)
- Responsive scale: Using golden ratio-based sizing
- Container: Max-width of 50rem with auto margins
- Grid systems: Flexible grid classes for image galleries
- Tables: Custom styled for content organization
- Responsive: Mobile-first approach with breakpoint at 37.5rem
- Automatic system theme detection
- Persistent user preference storage
- Smooth transitions between themes
- Accessible button with proper ARIA labels
- Client-side filtering with JavaScript
- URL-based state management
- Works on both archive and individual post pages
- Visual feedback for active filters
- Flexible grid system for galleries
- Proper alt text for accessibility
- Optimized loading with modern formats
Works in all modern browsers and many older versions. The site uses standard web technologies with broad compatibility:
- Modern browsers: Chrome 60+, Firefox 55+, Safari 11+, Edge 16+
- Mobile: iOS Safari 11+, Chrome Mobile 60+
- Progressive enhancement: Core content accessible without JavaScript
- Google Fonts: Roboto Mono, Atkinson Hyperlegible
- Font Awesome: Icons (v6.5.1)
- No JavaScript frameworks - vanilla JS only
- Minimal HTTP requests
- Optimized CSS with efficient selectors
- Fast loading with properly sized images
- No tracking scripts or analytics
This project embodies several key principles:
- Personal ownership of content and digital presence
- Minimal, distraction-free design
- Accessibility-first approach
- Privacy-respecting with no tracking
- Long-term sustainability with simple technologies
- A modern web browser
- A web server (for local development)
- Clone or download the project files
- Start a local server:
# Using Python 3 python -m http.server 8000 # Using Node.js (if you have http-server installed) npx http-server # Using PHP php -S localhost:8000
- Open
http://localhost:8000
in your browser
This is a static site that can be deployed to any web hosting service:
- GitHub Pages
- Netlify
- Vercel
- Traditional web hosting
Edit CSS variables in styles.css
:
:root {
--bg-primary: #fffef1; /* Background color */
--text-primary: #202020; /* Main text color */
--link-bg: #e0e0e0; /* Link background */
/* ... other variables */
}
- Create HTML file following the existing structure
- Include proper meta tags and navigation
- Add entry to relevant index pages
- Update navigation breadcrumbs
Modify font families and sizes in CSS variables:
:root {
--font-heading: "Roboto Mono", monospace;
--font-content: "Atkinson Hyperlegible", sans-serif;
--text-base: 1rem;
/* ... other typography variables */
}
This project structure and code can be used as a template for personal websites. Please replace personal content (name, projects, etc.) with your own.
This is a personal website, but if you find bugs or have suggestions for the template structure, feel free to:
- Report issues with the code structure
- Suggest accessibility improvements
- Propose performance optimizations
Note: This site represents a personal approach to web presence focused on sustainability, accessibility, and content ownership in the modern internet landscape.