Files
BBeOS/community/website/index.html
Eliott 7b53cde2ae
Some checks failed
CI / markdown-lint (push) Failing after 14s
Complete BBeOS project implementation with BlackBerry-inspired website
- Updated .gitignore with comprehensive exclusions for build artifacts, IDE files, and OS-specific files
- Created BlackBerry-inspired website with Heroicons and Gitea integration
- Added complete project structure with all 7 phases implemented
- Included kernel drivers, UI components, telephony stack, and packaging tools
- Added emulation scripts for testing and development
- Comprehensive documentation for all development phases
- Security analysis and hardware testing guides
- SDK and application framework for third-party development
2025-08-01 10:20:28 +02:00

595 lines
22 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>BBeOS - BlackBerry Classic Linux OS</title>
<script src="https://unpkg.com/heroicons@2.0.18/24/outline/esm/index.js"></script>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
background: linear-gradient(135deg, #1a1a1a 0%, #2d2d2d 100%);
color: #ffffff;
line-height: 1.6;
}
.container {
max-width: 1200px;
margin: 0 auto;
padding: 0 20px;
}
/* Header */
header {
background: rgba(0, 0, 0, 0.8);
backdrop-filter: blur(10px);
padding: 1rem 0;
position: fixed;
width: 100%;
top: 0;
z-index: 1000;
border-bottom: 2px solid #00a8ff;
}
.header-content {
display: flex;
justify-content: space-between;
align-items: center;
}
.logo {
display: flex;
align-items: center;
gap: 1rem;
}
.logo-icon {
width: 40px;
height: 40px;
background: linear-gradient(45deg, #00a8ff, #0097e6);
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
}
.logo-text {
font-size: 1.5rem;
font-weight: bold;
background: linear-gradient(45deg, #00a8ff, #0097e6);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
nav ul {
display: flex;
list-style: none;
gap: 2rem;
}
nav a {
color: #ffffff;
text-decoration: none;
font-weight: 500;
transition: color 0.3s ease;
}
nav a:hover {
color: #00a8ff;
}
/* Hero Section */
.hero {
padding: 120px 0 80px;
text-align: center;
background: linear-gradient(135deg, rgba(0, 168, 255, 0.1) 0%, rgba(0, 151, 230, 0.1) 100%);
}
.hero h1 {
font-size: 3.5rem;
margin-bottom: 1rem;
background: linear-gradient(45deg, #00a8ff, #0097e6);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.hero p {
font-size: 1.2rem;
margin-bottom: 2rem;
color: #cccccc;
max-width: 600px;
margin-left: auto;
margin-right: auto;
}
.cta-buttons {
display: flex;
gap: 1rem;
justify-content: center;
flex-wrap: wrap;
}
.btn {
padding: 12px 24px;
border: none;
border-radius: 8px;
font-weight: 600;
text-decoration: none;
display: inline-flex;
align-items: center;
gap: 0.5rem;
transition: all 0.3s ease;
cursor: pointer;
}
.btn-primary {
background: linear-gradient(45deg, #00a8ff, #0097e6);
color: white;
}
.btn-primary:hover {
transform: translateY(-2px);
box-shadow: 0 8px 25px rgba(0, 168, 255, 0.3);
}
.btn-secondary {
background: rgba(255, 255, 255, 0.1);
color: white;
border: 1px solid rgba(255, 255, 255, 0.2);
}
.btn-secondary:hover {
background: rgba(255, 255, 255, 0.2);
transform: translateY(-2px);
}
/* Features Section */
.features {
padding: 80px 0;
}
.section-title {
text-align: center;
font-size: 2.5rem;
margin-bottom: 3rem;
color: #ffffff;
}
.features-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 2rem;
}
.feature-card {
background: rgba(255, 255, 255, 0.05);
border: 1px solid rgba(255, 255, 255, 0.1);
border-radius: 12px;
padding: 2rem;
text-align: center;
transition: all 0.3s ease;
backdrop-filter: blur(10px);
}
.feature-card:hover {
transform: translateY(-5px);
border-color: #00a8ff;
box-shadow: 0 10px 30px rgba(0, 168, 255, 0.2);
}
.feature-icon {
width: 60px;
height: 60px;
background: linear-gradient(45deg, #00a8ff, #0097e6);
border-radius: 12px;
display: flex;
align-items: center;
justify-content: center;
margin: 0 auto 1rem;
}
.feature-card h3 {
font-size: 1.3rem;
margin-bottom: 1rem;
color: #ffffff;
}
.feature-card p {
color: #cccccc;
}
/* Hardware Section */
.hardware {
padding: 80px 0;
background: rgba(0, 0, 0, 0.3);
}
.hardware-content {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 4rem;
align-items: center;
}
.hardware-text h2 {
font-size: 2.5rem;
margin-bottom: 1.5rem;
color: #ffffff;
}
.hardware-text p {
color: #cccccc;
margin-bottom: 2rem;
}
.specs-list {
list-style: none;
}
.specs-list li {
padding: 0.5rem 0;
color: #cccccc;
display: flex;
align-items: center;
gap: 0.5rem;
}
.hardware-image {
text-align: center;
}
.phone-mockup {
width: 300px;
height: 400px;
background: linear-gradient(45deg, #1a1a1a, #2d2d2d);
border-radius: 30px;
border: 3px solid #00a8ff;
position: relative;
margin: 0 auto;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.2rem;
color: #00a8ff;
}
/* Download Section */
.download {
padding: 80px 0;
text-align: center;
}
.download-content {
max-width: 600px;
margin: 0 auto;
}
.download h2 {
font-size: 2.5rem;
margin-bottom: 1.5rem;
color: #ffffff;
}
.download p {
color: #cccccc;
margin-bottom: 2rem;
}
/* Footer */
footer {
background: rgba(0, 0, 0, 0.8);
padding: 2rem 0;
text-align: center;
border-top: 2px solid #00a8ff;
}
.footer-content {
display: flex;
justify-content: space-between;
align-items: center;
flex-wrap: wrap;
gap: 1rem;
}
.footer-links {
display: flex;
gap: 2rem;
}
.footer-links a {
color: #cccccc;
text-decoration: none;
transition: color 0.3s ease;
}
.footer-links a:hover {
color: #00a8ff;
}
.social-links {
display: flex;
gap: 1rem;
}
.social-link {
width: 40px;
height: 40px;
background: rgba(255, 255, 255, 0.1);
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
color: #ffffff;
text-decoration: none;
transition: all 0.3s ease;
}
.social-link:hover {
background: #00a8ff;
transform: translateY(-2px);
}
/* Responsive Design */
@media (max-width: 768px) {
.hero h1 {
font-size: 2.5rem;
}
.hardware-content {
grid-template-columns: 1fr;
gap: 2rem;
}
.cta-buttons {
flex-direction: column;
align-items: center;
}
.footer-content {
flex-direction: column;
text-align: center;
}
nav ul {
display: none;
}
}
/* Animations */
@keyframes fadeInUp {
from {
opacity: 0;
transform: translateY(30px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.fade-in-up {
animation: fadeInUp 0.6s ease-out;
}
</style>
</head>
<body>
<header>
<div class="container">
<div class="header-content">
<div class="logo">
<div class="logo-icon">
<svg width="24" height="24" fill="currentColor" viewBox="0 0 24 24">
<path d="M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5"/>
</svg>
</div>
<span class="logo-text">BBeOS</span>
</div>
<nav>
<ul>
<li><a href="#home">Home</a></li>
<li><a href="#features">Features</a></li>
<li><a href="#hardware">Hardware</a></li>
<li><a href="#download">Download</a></li>
</ul>
</nav>
</div>
</div>
</header>
<section class="hero" id="home">
<div class="container">
<h1 class="fade-in-up">BBeOS</h1>
<p class="fade-in-up">A lightweight, secure, non-Android, Linux-based operating system for the BlackBerry Classic (Q20) that transforms this iconic device into a modern, privacy-focused smartphone.</p>
<div class="cta-buttons fade-in-up">
<a href="https://gitea.lab48.be/eliott/BBeOS" class="btn btn-primary">
<svg width="20" height="20" fill="currentColor" viewBox="0 0 24 24">
<path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2z"/>
</svg>
View on Gitea
</a>
<a href="#download" class="btn btn-secondary">
<svg width="20" height="20" fill="currentColor" viewBox="0 0 24 24">
<path d="M12 16l-5-5h3V4h4v7h3l-5 5z"/>
</svg>
Download
</a>
</div>
</div>
</section>
<section class="features" id="features">
<div class="container">
<h2 class="section-title">Key Features</h2>
<div class="features-grid">
<div class="feature-card">
<div class="feature-icon">
<svg width="24" height="24" fill="currentColor" viewBox="0 0 24 24">
<path d="M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5"/>
</svg>
</div>
<h3>Native Hardware Support</h3>
<p>Boot on ARMv7 architecture with full hardware integration for the BlackBerry Classic Q20.</p>
</div>
<div class="feature-card">
<div class="feature-icon">
<svg width="24" height="24" fill="currentColor" viewBox="0 0 24 24">
<path d="M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z"/>
</svg>
</div>
<h3>Security-First Design</h3>
<p>Privacy-focused design with minimal attack surface and secure boot chain.</p>
</div>
<div class="feature-card">
<div class="feature-icon">
<svg width="24" height="24" fill="currentColor" viewBox="0 0 24 24">
<path d="M12 18h.01M8 21h8a2 2 0 002-2V5a2 2 0 00-2-2H8a2 2 0 00-2 2v14a2 2 0 002 2z"/>
</svg>
</div>
<h3>Physical Interface Optimization</h3>
<p>GUI designed for trackpad navigation and physical QWERTY keyboard.</p>
</div>
<div class="feature-card">
<div class="feature-icon">
<svg width="24" height="24" fill="currentColor" viewBox="0 0 24 24">
<path d="M3 5a2 2 0 012-2h3.28a1 1 0 01.948.684l1.498 4.493a1 1 0 01-.502 1.21l-2.257 1.13a11.042 11.042 0 005.516 5.516l1.13-2.257a1 1 0 011.21-.502l4.493 1.498a1 1 0 01.684.949V19a2 2 0 01-2 2h-1C9.716 21 3 14.284 3 6V5z"/>
</svg>
</div>
<h3>Core Telephony</h3>
<p>Complete phone functionality including calling, SMS, Wi-Fi, and GPS.</p>
</div>
<div class="feature-card">
<div class="feature-icon">
<svg width="24" height="24" fill="currentColor" viewBox="0 0 24 24">
<path d="M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z"/>
<path d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"/>
</svg>
</div>
<h3>Open Source</h3>
<p>Community-driven development with transparent codebase and GPL v3 licensing.</p>
</div>
<div class="feature-card">
<div class="feature-icon">
<svg width="24" height="24" fill="currentColor" viewBox="0 0 24 24">
<path d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"/>
</svg>
</div>
<h3>Modern Linux</h3>
<p>Built on Linux 6.x with Wayland display server and modern development tools.</p>
</div>
</div>
</div>
</section>
<section class="hardware" id="hardware">
<div class="container">
<div class="hardware-content">
<div class="hardware-text">
<h2>BlackBerry Classic Q20 Hardware</h2>
<p>BBeOS is specifically designed for the iconic BlackBerry Classic Q20, leveraging its unique hardware capabilities.</p>
<ul class="specs-list">
<li><svg width="16" height="16" fill="currentColor" viewBox="0 0 24 24"><path d="M9 3v2m6-2v2M9 19v2m6-2v2M5 9H3m2 6H3m18-6h-2m2 6h-2M7 19h10a2 2 0 002-2V7a2 2 0 00-2-2H7a2 2 0 00-2 2v10a2 2 0 002 2zM9 9h6v6H9V9z"/></svg> Qualcomm MSM8960 (Snapdragon S4 Plus) - ARMv7 dual-core 1.5GHz</li>
<li><svg width="16" height="16" fill="currentColor" viewBox="0 0 24 24"><path d="M9 3v2m6-2v2M9 19v2m6-2v2M5 9H3m2 6H3m18-6h-2m2 6h-2M7 19h10a2 2 0 002-2V7a2 2 0 00-2-2H7a2 2 0 00-2 2v10a2 2 0 002 2zM9 9h6v6H9V9z"/></svg> 2GB LPDDR2 RAM</li>
<li><svg width="16" height="16" fill="currentColor" viewBox="0 0 24 24"><path d="M9 3v2m6-2v2M9 19v2m6-2v2M5 9H3m2 6H3m18-6h-2m2 6h-2M7 19h10a2 2 0 002-2V7a2 2 0 00-2-2H7a2 2 0 00-2 2v10a2 2 0 002 2zM9 9h6v6H9V9z"/></svg> 16GB eMMC Storage</li>
<li><svg width="16" height="16" fill="currentColor" viewBox="0 0 24 24"><path d="M9 3v2m6-2v2M9 19v2m6-2v2M5 9H3m2 6H3m18-6h-2m2 6h-2M7 19h10a2 2 0 002-2V7a2 2 0 00-2-2H7a2 2 0 00-2 2v10a2 2 0 002 2zM9 9h6v6H9V9z"/></svg> 3.5" 720x720 IPS LCD (1:1 aspect ratio)</li>
<li><svg width="16" height="16" fill="currentColor" viewBox="0 0 24 24"><path d="M9 3v2m6-2v2M9 19v2m6-2v2M5 9H3m2 6H3m18-6h-2m2 6h-2M7 19h10a2 2 0 002-2V7a2 2 0 00-2-2H7a2 2 0 00-2 2v10a2 2 0 002 2zM9 9h6v6H9V9z"/></svg> Physical QWERTY Keyboard with Trackpad</li>
<li><svg width="16" height="16" fill="currentColor" viewBox="0 0 24 24"><path d="M9 3v2m6-2v2M9 19v2m6-2v2M5 9H3m2 6H3m18-6h-2m2 6h-2M7 19h10a2 2 0 002-2V7a2 2 0 00-2-2H7a2 2 0 00-2 2v10a2 2 0 002 2zM9 9h6v6H9V9z"/></svg> Qualcomm MDM9615 LTE/3G Modem</li>
<li><svg width="16" height="16" fill="currentColor" viewBox="0 0 24 24"><path d="M9 3v2m6-2v2M9 19v2m6-2v2M5 9H3m2 6H3m18-6h-2m2 6h-2M7 19h10a2 2 0 002-2V7a2 2 0 00-2-2H7a2 2 0 00-2 2v10a2 2 0 002 2zM9 9h6v6H9V9z"/></svg> Wi-Fi 802.11n, Bluetooth 4.0, GPS</li>
<li><svg width="16" height="16" fill="currentColor" viewBox="0 0 24 24"><path d="M9 3v2m6-2v2M9 19v2m6-2v2M5 9H3m2 6H3m18-6h-2m2 6h-2M7 19h10a2 2 0 002-2V7a2 2 0 00-2-2H7a2 2 0 00-2 2v10a2 2 0 002 2zM9 9h6v6H9V9z"/></svg> 2515mAh Removable Battery</li>
</ul>
</div>
<div class="hardware-image">
<div class="phone-mockup">
<div style="text-align: center;">
<div style="font-size: 2rem; margin-bottom: 0.5rem;">📱</div>
<div>BlackBerry</div>
<div>Classic Q20</div>
</div>
</div>
</div>
</div>
</div>
</section>
<section class="download" id="download">
<div class="container">
<div class="download-content">
<h2>Get BBeOS</h2>
<p>BBeOS is currently in active development. Join the community and contribute to bringing new life to the BlackBerry Classic.</p>
<div class="cta-buttons">
<a href="https://gitea.lab48.be/eliott/BBeOS" class="btn btn-primary">
<svg width="20" height="20" fill="currentColor" viewBox="0 0 24 24">
<path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2z"/>
</svg>
View Source on Gitea
</a>
</div>
</div>
</div>
</section>
<footer>
<div class="container">
<div class="footer-content">
<div>
<p>&copy; 2025 BBeOS Project. Open source under GPL v3.</p>
</div>
<div class="footer-links">
<a href="https://gitea.lab48.be/eliott/BBeOS">Repository</a>
<a href="#features">Features</a>
<a href="#hardware">Hardware</a>
</div>
<div class="social-links">
<a href="https://gitea.lab48.be/eliott/BBeOS" class="social-link" title="Gitea Repository">
<svg width="20" height="20" fill="currentColor" viewBox="0 0 24 24">
<path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2z"/>
</svg>
</a>
</div>
</div>
</div>
</footer>
<script>
// Smooth scrolling for navigation links
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener('click', function (e) {
e.preventDefault();
const target = document.querySelector(this.getAttribute('href'));
if (target) {
target.scrollIntoView({
behavior: 'smooth',
block: 'start'
});
}
});
});
// Add fade-in animation to elements when they come into view
const observerOptions = {
threshold: 0.1,
rootMargin: '0px 0px -50px 0px'
};
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.classList.add('fade-in-up');
}
});
}, observerOptions);
// Observe all feature cards and sections
document.querySelectorAll('.feature-card, .hardware-content, .download-content').forEach(el => {
observer.observe(el);
});
</script>
</body>
</html>