add: assets, some fixes, and build system

This commit is contained in:
Charles
2025-10-12 23:38:44 -07:00
parent 4ab17e5872
commit 167fc33f8c
9 changed files with 244 additions and 33 deletions
+167 -31
View File
@@ -1,5 +1,6 @@
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="stylesheet" href="theme/cyberpunk-2077.css" />
@@ -9,6 +10,13 @@
</head>
<body>
<section class="cyberpunk hidden" id="navBar">
<a class="cyberpunk" href="#/jobs">Jobs listing</a>
<a class="cyberpunk" style="--background-color: gray;"><s>Post job</s></a>
<a class="cyberpunk" href="#/tech" style="--background-color: var(--purple-color);">Cool shards</a>
<a class="cyberpunk" style="--background-color: gray;"><s>Sell tech</s>></a>
</section>
<section class="cyberpunk black both" id="passwordPrompt">
<img class="cyberpunk" src="img/qrcode.png" alt="" />
<h3>Prove yourself. Hack the ...</h3>
@@ -17,56 +25,184 @@
<button type="submit" class="cyberpunk purple">Submit_</button>
</form>
</section>
<section class="cyberpunk black both hidden" id="jobs">
<h1 class="cyberpunk">Orange's job board</h1>
<p class="cyberpunk">
Welcome, Choomba, to Orange's job board!
You must be <a href="#">1337</a> to have been invited here.
Unless you found this board without being invited?
If that's the case, <i>choomba</i>, you deserve to be here even more.
Take a look, share with friends, resist the <a href="#">corpos</a>!
</p>
<div class="cyberpunk hack hidden" id="hackThePlanet">
HACK THE PLANET!
</div>
<section class="cyberpunk black both" id="jobs">
<h1 class="cyberpunk">Compilation of jobs from gonks who will asphyxiated on their own vomit</h1>
<div class="cyberpunk">
<p>
Welcome to the bleeding edge of opportunity, choom. In the neon-drenched streets of this city,
finding
the
right talent for the job can mean the difference between a fat payday and a flatline. You've got a
problem
that needs solving, a package that needs delivering, or a rival that needs disappearing, but the
usual
channels are a no-go. This is the place where whispers become contracts and desperate pleas find
their
answer in a storm of code and chrome.
<br />
Your humble host and fixer, CK--that's Cereal Killer to the uninitiated--curates this little corner
of
the
Net
from his haunt at the NDA Lounge. The system is simple: you have the eddies, and someone on this
board
has
the skills. From solos with itchy trigger fingers and netrunners who can dance through ICE, to techs
who
can
turn scrap into gold, you'll find your crew right here. No job is too dirty, too weird, or too
dangerous, as
long as the price is right.
<br />
So, step right up. Post your gig. Be specific, be clear, and be ready to pay. Or maybe you're the
one
with
the skills, looking for the next big score. Browse the listings, find your contract, and make a name
for
yourself on the Street. Just remember the first rule of the NDA Lounge, and by extension, this
board:
what
happens here, stays here. Now, let's get to business.
</p>
</div>
<h2 class="cyberpunk">Jobs</h2>
<ul class="cyberpunk">
<li><a href="#" onclick="show('mission1')">$$ Crew needed to recover sensitive payload. 1/4 upfront</a></li>
<li><a href="#/mission1">$$ Crew needed for urgent retrieval op - discretion paid handsomely</a></li>
</ul>
</section>
<section class="cyberpunk black both hidden" id="mission1">
<h1 class="cyberpunk">$$ Crew needed to recover sensitive payload. 1/4 upfront</h1>
<section class="cyberpunk black both" id="tech">
<h1>Data shards</h1>
<div class="boxtree">
<div class="children2 width1">
<h2>
Retro tabletop rulebook
<sub>$0</sub>
</h2>
This neat little shard was found in on old drives I scoured from kids computer, "Lucy".
Total gonk, but the game is fun.
<br />
Grab it <a href="assets/rule-book.pdf">here</a>
</div>
<div class="children0 width2">
<h2>
Templates for imagination
<sub>$0</sub>
</h2>
When you want to be in a BD but are too broke to do it. Use your "imagination".
<br />
Grab it <a href="assets/character-sheet.pdf">here</a>
</div>
<div class="children0 width2">
<h2>
Find your soul
<sub>$0</sub>
</h2>
Life is full of patterns. Everything, from the grid of the city to the flow of net, even
our souls. Some nova thinker put together this guide to help you find yourself.
<br />
Grab it <a href="assets/rule-book-roles.pdf">here</a>
</div>
</div>
</section>
<section class="cyberpunk black both" id="mission1">
<h1 class="cyberpunk">$$ Crew needed for urgent retrieval op - discretion paid handsomely</h1>
<p class="cyberpunk job-listing">
<img class="cyberpunk portrait" src="img/twitchy.png" alt="" />
Desperate need for help recovering sensitive assets from dangerous doll.
Will pay 10_000$ for safe delivery with no questions asked.
Urgent help needed.
Find me at the NDA Lounge for more information.
I'm seeking a team of skilled professionals for an urgent retrieval operation. A sensitive "business"
arrangement has soured, and a former associate is now in possession of digital keycodes that are linked
to a
piece of personal hardware that is having... adverse effects on my physical and mental
well-being.
This doll has some top notch security; a full crew, willing to go that extra mile, need apply.
<br />
The codes within a secure private facility in an industrial part of town. Be advised, security has
recently
been upgraded to a professional-grade level. Discretion is absolutely paramount; this is a personal
matter,
and I need it handled quietly.
<br />
Job pays 10_000$, with some fraction available up-front to a convincing crew.
</p>
</section>
<script>
const elements = {
'jobs': document.getElementById('jobs'),
'mission1': document.getElementById('mission1'),
'passwordPrompt': document.getElementById('passwordPrompt'),
const navElements = {
'/': document.getElementById('passwordPrompt'),
'/jobs': document.getElementById('jobs'),
'/mission1': document.getElementById('mission1'),
'/passwordPrompt': document.getElementById('passwordPrompt'),
'/tech': document.getElementById('tech'),
'navBar': document.getElementById('navBar'),
};
const passwordForm = document.getElementById("passwordForm");
function show(target) {
for (let el in elements) {
elements[el].classList.add('hidden');
}
elements[target].classList.remove('hidden');
let el = {
'passwordForm': document.getElementById("passwordForm"),
'passwordInput': document.getElementById('passwordInput'),
'hackThePlanet': document.getElementById('hackThePlanet')
};
let showNavBar = false;
// Merge navElements into el and verify everything exists
for (let key in navElements) {
if (key in el) {
console.log(`WARNING: overlapping navElement and el: ${key}`)
};
el[key] = navElements[key];
}
passwordForm.addEventListener("submit", function (e) {
for (let key in el) {
if (el[key] == undefined) {
console.log(`WARNING: invalid key ${key}`);
}
}
function show(target) {
history.pushState({ pageID: target }, target, `#/${target}`);
updateForURL(target);
}
el.passwordForm.addEventListener("submit", function (e) {
e.preventDefault();
var formData = Object.fromEntries(new FormData(passwordForm));
if(formData['passwordInput'] == 'PLANET!!!') {
var formData = Object.fromEntries(new FormData(el.passwordForm));
if (formData['passwordInput'] == 'PLANET!!!') {
show('jobs');
}
document.getElementById('passwordInput').setAttribute('value', '');
el.passwordInput.setAttribute('value', '');
});
/// Parses the URL and renders a page
function updateForURL(event) {
let url = window.location.hash.replace(/^#*\/*/, '/');
for (let el in navElements) {
navElements[el].classList.add('hidden');
}
navElements[url].classList.remove('hidden');
if (url != '/') {
navElements['navBar'].classList.remove('hidden');
}
}
updateForURL();
window.addEventListener('hashchange', updateForURL);
setTimeout(() => {
el.hackThePlanet.classList.remove('hidden');
setTimeout(() => {
el.hackThePlanet.classList.add('hidden');
}, 2000)
}, 5000)
</script>
</body>