A responsive, accessible landing page for Conspire ephemeral anonymous chat. Perfect for community organizing and secure communication.
- Responsive Design: Works on desktop, tablet, and mobile
- Accessibility: WCAG 2.1 compliant with semantic HTML5
- Room Generation: Cryptographically secure Base58 room IDs
- Modern CSS: Clean, maintainable styles with CSS Grid/Flexbox
- No Dependencies: Pure HTML/CSS/JavaScript - no build process required
# Serve locally
python3 -m http.server 8000
open http://localhost:8000The landing page automatically redirects to Conspire on port 8443:
https://your-domain.com:8443/room/{random-base58-id}
conspire-site/
βββ index.html # Main landing page
βββ style.css # Minnesota civic theme styling
βββ room.js # Base58 room ID generator
βββ README.md # This file
Edit index.html to change:
- Page title and meta tags
- Header content and tagline
- Feature descriptions
- Footer information
Modify style.css for:
- Color scheme (default: Minnesota civic blue/gold)
- Typography and spacing
- Responsive breakpoints
- Component styling
The room.js script:
- Generates cryptographically secure room IDs
- Uses Base58 encoding for URL-friendly strings
- Auto-attaches to any button with
id="new-room" - Supports custom room ID length configuration
// Generate longer room IDs for increased security
function generateRoomId(length = 32) {
const buffer = new Uint8Array(length);
crypto.getRandomValues(buffer);
return encodeBase58(buffer);
}# Lint JavaScript
npx eslint room.js
# Validate HTML
curl -s https://validator.w3.org/nu/?out=json -H "Content-Type: text/html" --data-binary @index.html
# Responsive testing
python3 -m http.server 8000
# Open on different devices or use browser dev tools// Test Base58 encoding
const testBuffer = new TextEncoder().encode('Hello World');
const encoded = encodeBase58(testBuffer);
console.log(encoded); // Should output: 2NEpo7TZRs
// Test room generation
const roomId = generateRoomId();
console.log(roomId); // e.g., "5KQwrPbwdL6PhXujxW37FSSfu"- Community Organizing: Neighborhood watch, local events
- Activism: Secure coordination for social movements
- Education: Anonymous classroom discussions
- Support Groups: Private, safe sharing spaces
- Business: Secure team communication
# In main project
git submodule add https://github.com/your-org/conspire-site.git site_content
git submodule update --init --remoteCopy the files to your web server's document root:
cp -r conspire-site/* /var/www/your-domain.com/your-domain.com {
root * /var/www/your-domain.com
file_server
encode gzip
}- Chrome 67+
- Firefox 60+
- Safari 12+
- Edge 79+
Uses modern JavaScript features:
crypto.getRandomValues()for secure randomnessUint8Arrayfor efficient byte handling- ES6 const/let for better scoping
- No Tracking: No analytics, cookies, or tracking scripts
- Secure Randomness: Uses
crypto.getRandomValues()for room IDs - HTTPS Ready: Designed for HTTPS deployment
- No Dependencies: Reduced attack surface
- Primary Blue:
#2c3e50 - Accent Gold:
#f39c12 - Text Dark:
#2c3e50 - Text Light:
#7f8c8d - Background:
#ffffff
- Headings: System UI fonts, bold weights
- Body: System UI fonts, regular weight
- Buttons: System UI fonts, medium weight
- Mobile: < 768px
- Tablet: 768px - 1024px
- Desktop: > 1024px
MIT License - see LICENSE for details.
See the main CONTRIBUTING.md for:
- Code style guidelines
- Testing requirements
- Pull request process
- Community standards
- conspire-infra - Ansible deployment infrastructure
- Conspire - Core ephemeral chat application
- Dyne.org - Organization behind Conspire
Built for secure, anonymous community communication. π