Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
132 changes: 132 additions & 0 deletions bouy-os.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link
href="https://fonts.googleapis.com/css?family=Rubik"
rel="stylesheet"
/>
<link rel="stylesheet" href="style.css" />
<title>Bouy - darksoil studio</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<header>
<button class="hamburger-menu" aria-label="Open menu" aria-expanded="false">
<span></span>
<span></span>
<span></span>
</button>
<nav class="menu-links">
<a href="index.html">Home</a>
<div class="dropdown">
<a href="#" class="dropdown-toggle">Projects ▾</a>
<div class="dropdown-menu">
<a href="dash-chat.html">Dash Chat</a>
<a href="https://darksoil.studio/p2p-shipyard">p2p Shipyard</a>
<a href="corri.html">Corri AI</a>
<a href="bouy-os.html">Buoy</a>
</div>
</div>
<a href="index.html#connect">Connect</a>
<a href="https://darksoil.studio/p2p-shipyard/" class="dev-btn" target="_blank" rel="noopener" title="Developer Documentation">Dev</a>
<custom-social-link name="Github" url="https://github.com/darksoil-studio"></custom-social-link>
<custom-social-link name="Substack" url="https://darksoil.substack.com"></custom-social-link>
<custom-social-link name="YouTube" url="https://www.youtube.com/@darksoilstudio"></custom-social-link>
</nav>
<div class="mobile-menu-overlay">
<button class="close-mobile-menu" aria-label="Close menu">&times;</button>
<nav class="mobile-menu-content">
<a href="index.html">Home</a>
<a href="dash-chat.html">Dash Chat</a>
<a href="https://darksoil.studio/p2p-shipyard">p2p Shipyard</a>
<a href="corri.html">Corri AI</a>
<a href="bouy-os.html">Buoy</a>
<a href="index.html#connect">Connect</a>
<a href="https://darksoil.studio/p2p-shipyard/" class="dev-btn" target="_blank" rel="noopener" title="Developer Documentation">Dev</a>
</nav>
</div>
</header>

<rocket-content-area>
<h2>Bouy OS</h2>
<p>
Your distributed data, available where you need it.
</p>
<br />
<p>
<i>Coming soon.</i>
</p>
</rocket-content-area>

<footer>
<p class="legal">
© 2025 darksoil studio. All rights reserved.
</p>
</footer>

<script type="module">
export async function registerCustomElements() {
// server-only components
// prettier-ignore
customElements.define('rocket-content-area', await import('@rocket/components/content-area.js').then(m => m.RocketContentArea));
// prettier-ignore
customElements.define('rocket-card', await import('@rocket/components/card.js').then(m => m.RocketCard));
// prettier-ignore
customElements.define('rocket-columns', await import('@rocket/components/columns.js').then(m => m.RocketColumns));
}

registerCustomElements();
import "./custom-social-link.js";
</script>
<script>
document.addEventListener('DOMContentLoaded', () => {
const hamburger = document.querySelector('.hamburger-menu');
const mobileOverlay = document.querySelector('.mobile-menu-overlay');
const closeMobileMenu = document.querySelector('.close-mobile-menu');
const dropdown = document.querySelector('.dropdown');
const dropdownToggle = document.querySelector('.dropdown-toggle');
const dropdownMenu = document.querySelector('.dropdown-menu');

// Hamburger opens overlay
if (hamburger && mobileOverlay) {
hamburger.addEventListener('click', () => {
mobileOverlay.classList.add('open');
hamburger.setAttribute('aria-expanded', true);
});
}
if (closeMobileMenu && mobileOverlay) {
closeMobileMenu.addEventListener('click', () => {
mobileOverlay.classList.remove('open');
hamburger.setAttribute('aria-expanded', false);
});
}
// Close overlay when clicking outside nav
mobileOverlay.addEventListener('click', (e) => {
if (e.target === mobileOverlay) {
mobileOverlay.classList.remove('open');
hamburger.setAttribute('aria-expanded', false);
}
});

// Desktop dropdown logic only
if (dropdown && dropdownToggle && dropdownMenu) {
dropdownToggle.addEventListener('click', (e) => {
e.preventDefault();
e.stopPropagation();
dropdown.classList.toggle('open');
});
document.addEventListener('click', (e) => {
if (!dropdown.contains(e.target)) {
dropdown.classList.remove('open');
}
});
dropdownMenu.querySelectorAll('a').forEach(link => {
link.addEventListener('click', () => {
dropdown.classList.remove('open');
});
});
}
});
</script>
</body>
</html>
133 changes: 133 additions & 0 deletions corri.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link
href="https://fonts.googleapis.com/css?family=Rubik"
rel="stylesheet"
/>
<link rel="stylesheet" href="style.css" />
<title>Corri AI - darksoil studio</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<header>
<button class="hamburger-menu" aria-label="Open menu" aria-expanded="false">
<span></span>
<span></span>
<span></span>
</button>
<nav class="menu-links">
<a href="index.html">Home</a>
<div class="dropdown">
<a href="#" class="dropdown-toggle">Projects ▾</a>
<div class="dropdown-menu">
<a href="dash-chat.html">Dash Chat</a>
<a href="https://darksoil.studio/p2p-shipyard">p2p Shipyard</a>
<a href="corri.html">Corri AI</a>
<a href="bouy-os.html">Buoy</a>
</div>
</div>
<a href="index.html#connect">Connect</a>
<a href="https://darksoil.studio/p2p-shipyard/" class="dev-btn" target="_blank" rel="noopener" title="Developer Documentation">Dev</a>
<custom-social-link name="Github" url="https://github.com/darksoil-studio"></custom-social-link>
<custom-social-link name="Substack" url="https://darksoil.substack.com"></custom-social-link>
<custom-social-link name="YouTube" url="https://www.youtube.com/@darksoilstudio"></custom-social-link>
</nav>
<div class="mobile-menu-overlay">
<button class="close-mobile-menu" aria-label="Close menu">&times;</button>
<nav class="mobile-menu-content">
<a href="index.html">Home</a>
<a href="dash-chat.html">Dash Chat</a>
<a href="https://darksoil.studio/p2p-shipyard">p2p Shipyard</a>
<a href="corri.html">Corri AI</a>
<a href="bouy-os.html">Buoy</a>
<a href="index.htmlindex.html#connect">Connect</a>
<a href="https://darksoil.studio/p2p-shipyard/" class="dev-btn" target="_blank" rel="noopener" title="Developer Documentation">Dev</a>
</nav>
</div>
</header>

<rocket-content-area>
<h2>Corri AI</h2>
<p>
Community matchmaker.<br><br>
Corri is a peer-to-peer, local-first AI matchmaking designed to help communities and events match needs, offers, and shared interests in real time. Whether it's conferences, teams, or residential communities, Corri connects people around ideas, resources, and opportunities—without centralized gatekeepers.<br><br>
It's intelligent coordination for groups to discover and act on their potential.
</p>
<p style="margin-top: 2em; font-weight: bold;">
Interested? Reach out to us at <a href="mailto:hello@darksoil.studio">hello@darksoil.studio</a> to schedule a demo!
</p>
</rocket-content-area>

<footer>
<p class="legal">
© 2025 darksoil studio. All rights reserved.
</p>
</footer>

<script type="module">
export async function registerCustomElements() {
// server-only components
// prettier-ignore
customElements.define('rocket-content-area', await import('@rocket/components/content-area.js').then(m => m.RocketContentArea));
// prettier-ignore
customElements.define('rocket-card', await import('@rocket/components/card.js').then(m => m.RocketCard));
// prettier-ignore
customElements.define('rocket-columns', await import('@rocket/components/columns.js').then(m => m.RocketColumns));
}

registerCustomElements();
import "./custom-social-link.js";
</script>
<script>
document.addEventListener('DOMContentLoaded', () => {
const hamburger = document.querySelector('.hamburger-menu');
const mobileOverlay = document.querySelector('.mobile-menu-overlay');
const closeMobileMenu = document.querySelector('.close-mobile-menu');
const dropdown = document.querySelector('.dropdown');
const dropdownToggle = document.querySelector('.dropdown-toggle');
const dropdownMenu = document.querySelector('.dropdown-menu');

// Hamburger opens overlay
if (hamburger && mobileOverlay) {
hamburger.addEventListener('click', () => {
mobileOverlay.classList.add('open');
hamburger.setAttribute('aria-expanded', true);
});
}
if (closeMobileMenu && mobileOverlay) {
closeMobileMenu.addEventListener('click', () => {
mobileOverlay.classList.remove('open');
hamburger.setAttribute('aria-expanded', false);
});
}
// Close overlay when clicking outside nav
mobileOverlay.addEventListener('click', (e) => {
if (e.target === mobileOverlay) {
mobileOverlay.classList.remove('open');
hamburger.setAttribute('aria-expanded', false);
}
});

// Desktop dropdown logic only
if (dropdown && dropdownToggle && dropdownMenu) {
dropdownToggle.addEventListener('click', (e) => {
e.preventDefault();
e.stopPropagation();
dropdown.classList.toggle('open');
});
document.addEventListener('click', (e) => {
if (!dropdown.contains(e.target)) {
dropdown.classList.remove('open');
}
});
dropdownMenu.querySelectorAll('a').forEach(link => {
link.addEventListener('click', () => {
dropdown.classList.remove('open');
});
});
}
});
</script>
</body>
</html>
2 changes: 1 addition & 1 deletion custom-social-link.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ export class CustomSocialLink extends LitElement {
slot="social"
>
<span class="sr-only">${this.name}</span>
<img src="https://cdn.simpleicons.org/${this.name.toLowerCase()}/white"
<img src="https://cdn.simpleicons.org/${this.name.toLowerCase()}/black" />
</a>
`;
}
Expand Down
Loading
Loading