Created the rest of the pages and proofread. Staging for production

This commit is contained in:
Joshua L3
2025-06-21 02:39:33 -06:00
parent 9d84adef81
commit 22f919dc7b
8 changed files with 387 additions and 42 deletions

8
assets/exams.json Normal file
View File

@@ -0,0 +1,8 @@
[
{
"date": "Tuesday, June 24th",
"time": "8:00 PM",
"location": "BYU-Idaho Campus, Specific Location TBD",
"register": "https://hamstudy.org/sessions/685338c538f59212e8d09613/1"
}
]

14
assets/sample.exams.json Normal file
View File

@@ -0,0 +1,14 @@
[
{
"date": "Tuesday, June 24th",
"time": "8:00 PM",
"location": "BYU-Idaho Campus, Specific Location TBD",
"register": "https://hamstudy.org/sessions/685338c538f59212e8d09613/1"
},
{
"date": "Saturday, August 17",
"time": "10:00 AM",
"location": "Science & Technology Building Room 231",
"register": "https://example.com/register-august17"
}
]

149
exams.html Normal file
View File

@@ -0,0 +1,149 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Amateur Radio License Exams BYU-Idaho Amateur Radio Society</title>
<script src="https://cdn.tailwindcss.com"></script>
<script>
tailwind.config = {
darkMode: 'class'
}
</script>
<script>
if (localStorage.theme === 'dark' || (!('theme' in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
document.documentElement.classList.add('dark')
} else {
document.documentElement.classList.remove('dark')
}
</script>
<script src="https://cdn.jsdelivr.net/npm/alpinejs@3.x.x/dist/cdn.min.js" defer></script>
<style>
.accent-bg { background-color: #006eb6; }
.banner-bg { background-color: #a2daff; }
</style>
</head>
<body class="bg-white dark:bg-gray-900 text-gray-800 dark:text-gray-100 min-h-screen flex flex-col" x-data="appData()" x-init="init()">
<!-- Banner -->
<template x-if="banner.title && banner.content">
<div class="w-full banner-bg text-black text-center py-2 px-4">
<strong x-text="banner.title"></strong>: <span x-text="banner.content"></span>
</div>
</template>
<!-- Navbar -->
<nav class="accent-bg text-white px-4 py-3 shadow-md" x-data="{ open: false }">
<div class="flex flex-wrap items-center justify-between">
<a href="/" class="text-xl font-semibold mr-4">BYU-I Amateur Radio Society</a>
<button @click="open = !open" class="sm:hidden text-white ml-auto focus:outline-none">
<svg x-show="!open" xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16" />
</svg>
<svg x-show="open" xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" />
</svg>
</button>
<div class="hidden sm:flex flex-grow justify-center space-x-4">
<template x-for="page in pages" :key="page.path">
<a :href="page.path" :class="{ 'font-bold underline': currentPath === page.path }" class="hover:opacity-80 transition">
<span x-text="page.name"></span>
</a>
</template>
</div>
<div class="hidden sm:flex ml-auto">
<button @click="toggleDarkMode" class="ml-4 text-white focus:outline-none" title="Toggle dark mode">
<svg x-show="!darkMode" xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 3v1m0 16v1m8.66-8.66h-1M4.34 12H3m15.36 6.36l-.71-.71M6.34 6.34l-.71-.71m12.02 0l-.71.71M6.34 17.66l-.71.71M12 5a7 7 0 100 14 7 7 0 000-14z" />
</svg>
<svg x-show="darkMode" xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 12.79A9 9 0 1111.21 3a7 7 0 009.79 9.79z" />
</svg>
</button>
</div>
</div>
<div x-show="open" class="sm:hidden mt-2 space-y-2">
<template x-for="page in pages" :key="page.path">
<a :href="page.path" :class="{ 'font-bold underline': currentPath === page.path }" class="block px-2 py-1 hover:bg-white/10">
<span x-text="page.name"></span>
</a>
</template>
<button @click="toggleDarkMode" class="w-full text-left px-2 py-1 text-white hover:bg-white/10" title="Toggle dark mode">
<span x-text="darkMode ? '☀️ Light Mode' : '🌙 Dark Mode'"></span>
</button>
</div>
</nav>
<main class="flex-grow p-6">
<h1 class="text-3xl font-bold mb-4">License Exams</h1>
<p class="mb-4">
Interested in getting your amateur radio license? The BYU-I Amateur Radio Society hosts exam sessions right here in Rexburg!
</p>
<h2 class="text-xl font-semibold mt-6 mb-2">Upcoming Exam Sessions</h2>
<ul class="list-disc pl-6 space-y-2">
<template x-if="exams.length">
<template x-for="exam in exams" :key="exam.date">
<li>
<span x-text="exam.date"></span>,
<span x-text="exam.time"></span>
<span x-text="exam.location"></span>
<a :href="exam.register" class="text-blue-400 underline" target="_blank">Register Here</a>
</li>
</template>
</template>
<template x-if="!exams.length">
<li>
We don't have any sessions scheduled right now, but if you're ready to test let us know and we'll set one up!
</li>
</template>
</ul>
<h2 class="text-xl font-semibold mt-6 mb-2">Before You Test</h2>
<ul class="list-disc pl-6 space-y-2">
<li>Study using <a href="https://hamstudy.org/" class="text-blue-400 underline">HamStudy.org</a> or other resources</li>
<li>Take practice exams and be sure you're consistently scoring at least 80% (not required, but helpful)</li>
<li>Get your <a href="https://apps.fcc.gov/cores/userLogin.do" class="text-blue-400 underline">FCC FRN</a></li>
<li>Register for your session, or contact us to set one up</li>
</ul>
<h2 class="text-xl font-semibold mt-6 mb-2">When You Test</h2>
<ul class="list-disc pl-6 space-y-2">
<li>Bring a government-issued photo ID and a current student ID (students test free!) or $14 for the exam fee</li>
<li>If you have a calculator and are okay clearing its memory, feel free to bring it!</li>
<li>Our sessions typically run for at least an hour and often start a little early, so don't stress if you're running early or late. Just relax</li>
</ul>
</main>
<footer class="accent-bg text-white text-center py-4">
&copy; <span x-text="new Date().getFullYear()"></span> BYU-Idaho Amateur Radio Society. All rights reserved.
</footer>
<script>
function appData() {
return {
darkMode: document.documentElement.classList.contains('dark'),
currentPath: window.location.pathname,
banner: { title: '', content: '' },
pages: [],
async init() {
const navResp = await fetch('/assets/pages.json');
this.pages = await navResp.json();
const bannerResp = await fetch('/assets/banner.json');
this.banner = await bannerResp.json();
const examResp = await fetch('/assets/exams.json');
this.exams = await examResp.json();
},
toggleDarkMode() {
this.darkMode = !this.darkMode;
document.documentElement.classList.toggle('dark');
localStorage.theme = this.darkMode ? 'dark' : 'light';
}
}
}
</script>
</body>
</html>

116
history.html Normal file
View File

@@ -0,0 +1,116 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>History BYU-I Amateur Radio Society</title>
<script src="https://cdn.tailwindcss.com"></script>
<script>
tailwind.config = {
darkMode: 'class'
}
</script>
<script>
if (localStorage.theme === 'dark' || (!('theme' in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
document.documentElement.classList.add('dark')
} else {
document.documentElement.classList.remove('dark')
}
</script>
<script src="https://cdn.jsdelivr.net/npm/alpinejs@3.x.x/dist/cdn.min.js" defer></script>
<style>
.accent-bg { background-color: #006eb6; }
.banner-bg { background-color: #a2daff; }
</style>
</head>
<body class="bg-white dark:bg-gray-900 text-gray-800 dark:text-gray-100 min-h-screen flex flex-col" x-data="appData()" x-init="init()">
<!-- Banner -->
<template x-if="banner.title && banner.content">
<div class="w-full banner-bg text-black text-center py-2 px-4">
<strong x-text="banner.title"></strong>: <span x-text="banner.content"></span>
</div>
</template>
<!-- Navbar -->
<nav class="accent-bg text-white px-4 py-3 shadow-md" x-data="{ open: false }">
<div class="flex flex-wrap items-center justify-between">
<a href="/" class="text-xl font-semibold mr-4">BYU-I Amateur Radio Society</a>
<button @click="open = !open" class="sm:hidden text-white ml-auto focus:outline-none">
<svg x-show="!open" xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16" />
</svg>
<svg x-show="open" xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" />
</svg>
</button>
<div class="hidden sm:flex flex-grow justify-center space-x-4">
<template x-for="page in pages" :key="page.path">
<a :href="page.path" :class="{ 'font-bold underline': currentPath === page.path }" class="hover:opacity-80 transition">
<span x-text="page.name"></span>
</a>
</template>
</div>
<div class="hidden sm:flex ml-auto">
<button @click="toggleDarkMode" class="ml-4 text-white focus:outline-none" title="Toggle dark mode">
<svg x-show="!darkMode" xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 3v1m0 16v1m8.66-8.66h-1M4.34 12H3m15.36 6.36l-.71-.71M6.34 6.34l-.71-.71m12.02 0l-.71.71M6.34 17.66l-.71.71M12 5a7 7 0 100 14 7 7 0 000-14z" />
</svg>
<svg x-show="darkMode" xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 12.79A9 9 0 1111.21 3a7 7 0 009.79 9.79z" />
</svg>
</button>
</div>
</div>
<div x-show="open" class="sm:hidden mt-2 space-y-2">
<template x-for="page in pages" :key="page.path">
<a :href="page.path" :class="{ 'font-bold underline': currentPath === page.path }" class="block px-2 py-1 hover:bg-white/10">
<span x-text="page.name"></span>
</a>
</template>
<button @click="toggleDarkMode" class="w-full text-left px-2 py-1 text-white hover:bg-white/10" title="Toggle dark mode">
<span x-text="darkMode ? '☀️ Light Mode' : '🌙 Dark Mode'"></span>
</button>
</div>
</nav>
<main class="flex-grow p-6">
<h1 class="text-3xl font-bold mb-4">Our History</h1>
<p class="mb-4">
The BYU-Idaho Amateur Radio Society has a long-standing tradition of service, education, and community involvement. Our roots go back to Rick's College in the mid-1900s, and we're proud to still be here thriving today.
</p>
<p class="mb-4">
This page is a work in progress — check back soon for a more detailed history of our club's leadership, milestones, and notable moments!
</p>
</main>
<footer class="accent-bg text-white text-center py-4">
&copy; <span x-text="new Date().getFullYear()"></span> BYU-Idaho Amateur Radio Society. All rights reserved.
</footer>
<script>
function appData() {
return {
darkMode: document.documentElement.classList.contains('dark'),
currentPath: window.location.pathname,
banner: { title: '', content: '' },
pages: [],
async init() {
const navResp = await fetch('/assets/pages.json');
this.pages = await navResp.json();
const bannerResp = await fetch('/assets/banner.json');
this.banner = await bannerResp.json();
},
toggleDarkMode() {
this.darkMode = !this.darkMode;
document.documentElement.classList.toggle('dark');
localStorage.theme = this.darkMode ? 'dark' : 'light';
}
}
}
</script>
</body>
</html>

View File

@@ -36,7 +36,7 @@
<!-- Navbar -->
<nav class="accent-bg text-white px-4 py-3 shadow-md" x-data="{ open: false }">
<div class="flex flex-wrap items-center justify-between">
<a href="/" class="text-xl font-semibold mr-4">BYUIARS</a>
<a href="/" class="text-xl font-semibold mr-4">BYU-I Amateur Radio Society</a>
<button @click="open = !open" class="sm:hidden text-white ml-auto focus:outline-none">
<svg x-show="!open" xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16" />
@@ -77,8 +77,27 @@
<!-- Main Content -->
<main class="flex-grow p-6">
<h1 class="text-3xl font-bold mb-4">Welcome to the BYU-Idaho Amateur Radio Society</h1>
<p>This is a placeholder for your page content. Replace this with your actual content per page.</p>
<h1 class="text-3xl font-bold mb-4">Welcome to the BYU-Idaho Amateur Radio Society!</h1>
<p>Established in the mid-1900s, the BYU-Idaho Amateur Radio Society is one of the University's longest-operating student groups.</p>
<h2 class="text-xl font-semibold mt-6 mb-2">Get Involved</h2>
<p>We meet most Wednesdays during the semester in STC 231, and host weekly <a href="/net/" class="text-blue-400 underline">nets</a> on the 146.510 MHz K7BYI Repeater.
<br>
For more information on current events and what we're up to, join our <a href="https://discord.gg/D9fZ6uWugH" class="text-blue-400 underline">Discord</a>!
<br><br>We have activies for all skill levels, and no license is required to participate with us (though we'd be happy to help you get yours if you like)</p>
<h2 class="text-xl font-semibold mt-6 mb-2">Why Should I Join the Amateur Radio Society?</h2>
<ul class="list-disc pl-6 space-y-2">
<li>Hands-on opportunities to learn about, use, and build radios and antennas</li>
<li>Learn and apply physics</li>
<li>Be better prepared for emergencies and wilderness activities</li>
<li>Connect and network with some pretty cool folks</li>
<li>Obtain your federal Amateur Radio License at no cost to you (A $50 value!)</li>
<li>Plentiful scholarship opportunities</li>
<li>Inter-Society collaboration opportunities</li>
<li>Great project opportunities. Have a cool idea? We probably have people with the knowledge to help you make it happen!</li>
</ul>
</main>
<!-- Footer -->

View File

@@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Mesh Project BYUIARS</title>
<title>Rexburg Mesh BYU-I Amateur Radio Society</title>
<script src="https://cdn.tailwindcss.com"></script>
<script>
tailwind.config = {
@@ -35,7 +35,7 @@
<!-- Navbar -->
<nav class="accent-bg text-white px-4 py-3 shadow-md" x-data="{ open: false }">
<div class="flex flex-wrap items-center justify-between">
<a href="/" class="text-xl font-semibold mr-4">BYUIARS</a>
<a href="/" class="text-xl font-semibold mr-4">BYU-I Amateur Radio Society</a>
<button @click="open = !open" class="sm:hidden text-white ml-auto focus:outline-none">
<svg x-show="!open" xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16" />
@@ -78,28 +78,28 @@
<h1 class="text-3xl font-bold mb-4">Rexburg Meshtastic Network</h1>
<p class="mb-4">
The BYUIARS-sponsored Rexburg Meshtastic network is a low-power, long-range mesh radio network using LoRa devices to support off-grid communication. It is open to community participation and ideal for emergency scenarios and experimentation.
The BYU-I Amateur Radio Society is working on a Rexburg Meshtastic network! This is a low-power, long-range mesh radio network using LoRa devices to support off-grid communication. It is open for all to use and most nodes are designed to continue working in emergencies and extended power outages.
</p>
<h2 class="text-xl font-semibold mt-6 mb-2">How to Get Involved</h2>
<ul class="list-disc pl-6 space-y-2">
<li>Purchase a supported LoRa radio (many of our members go with the Heltec V3 or RAK 4631), or check one out at one of our weekly meetings</li>
<li>Flash the latest <a href="https://flasher.meshtastic.org/" class="text-blue-400 underline">Meshtastic firmware</a></li>
<li>Join our <a href="https://discord.gg/D9fZ6uWugH" class="text-blue-400 underline">Discord</a> to get help, share your setup, and connect with us</li>
<li>Get your node on the map (if it's stationary) by letting us know about it</li>
</ul>
<h2 class="text-xl font-semibold mt-6 mb-2">Current Node Map</h2>
<div class="aspect-w-16 aspect-h-9 mb-4">
<iframe
src="https://www.google.com/maps/d/embed?mid=YOUR_MYMAPS_ID_HERE"
src="https://www.google.com/maps/d/u/1/embed?mid=1P5dIeUwP6589f-JT1CaLcsottrrgGRM&ehbc=2E312F"
width="100%"
height="480"
height="560"
class="w-full rounded shadow-md"
loading="lazy"
allowfullscreen>
</iframe>
</div>
<h2 class="text-xl font-semibold mt-6 mb-2">How to Get Involved</h2>
<ul class="list-disc pl-6 space-y-2">
<li>Purchase a supported LoRa radio (we recommend the TTGO T-Beam v1.1)</li>
<li>Flash the latest <a href="https://meshtastic.org/" class="text-blue-400 underline">Meshtastic firmware</a></li>
<li>Join our <a href="https://discord.gg/YOUR_DISCORD_INVITE" class="text-blue-400 underline">Discord</a> to get help, share your setup, and connect</li>
<li>Place your node on the map by submitting your info</li>
</ul>
</main>
<footer class="accent-bg text-white text-center py-4">

View File

@@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Net Check-Ins BYUIARS</title>
<title>Net Check-Ins BYU-I Amateur Radio Society</title>
<script src="https://cdn.tailwindcss.com"></script>
<script>
tailwind.config = {
@@ -35,7 +35,7 @@
<!-- Navbar -->
<nav class="accent-bg text-white px-4 py-3 shadow-md" x-data="{ open: false }">
<div class="flex flex-wrap items-center justify-between">
<a href="/" class="text-xl font-semibold mr-4">BYUIARS</a>
<a href="/" class="text-xl font-semibold mr-4">BYU-I Amateur Radio Society</a>
<button @click="open = !open" class="sm:hidden text-white ml-auto focus:outline-none">
<svg x-show="!open" xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16" />
@@ -76,8 +76,21 @@
<main class="flex-grow p-6">
<h1 class="text-3xl font-bold mb-4">Weekly Net Check-Ins</h1>
<p>Our net meets each Tuesday at 8pm on the 146.510 repeater, which has a -6MHz offset and a bidirectional 100Hz tone. We'd love to hear you!</p>
<br><br>
<div x-data="netStats()" x-init="load()">
<template x-if="callsigns.length">
<div>
<h2 class="text-xl font-semibold mb-2">Callsigns That Have Checked In since January 2025</h2>
<ul class="columns-2 sm:columns-3 md:columns-4">
<template x-for="call in callsigns" :key="call">
<li x-text="call"></li>
</template>
</ul>
</div>
</template>
<br><br>
<template x-if="weekly.length">
<div class="mb-6">
<h2 class="text-xl font-semibold mb-2">Check-Ins Per Week</h2>
@@ -90,17 +103,6 @@
</ul>
</div>
</template>
<template x-if="callsigns.length">
<div>
<h2 class="text-xl font-semibold mb-2">Callsigns That Have Checked In</h2>
<ul class="columns-2 sm:columns-3 md:columns-4">
<template x-for="call in callsigns" :key="call">
<li x-text="call"></li>
</template>
</ul>
</div>
</template>
</div>
</main>

View File

@@ -1,18 +1,55 @@
{
"weekly": [
{ "date": "2025-06-06", "count": 12 },
{ "date": "2025-06-13", "count": 15 },
{ "date": "2025-06-20", "count": 9 },
{ "date": "2025-06-27", "count": 17 }
{ "date": "2025-06-17", "count": 5 },
{ "date": "2025-06-10", "count": 7 },
{ "date": "2025-06-03 [Repeater Outage]", "count": 2 },
{ "date": "2025-05-27", "count": 6 },
{ "date": "2025-05-20", "count": 4 },
{ "date": "2025-05-13", "count": 5 },
{ "date": "2025-05-06", "count": 7 },
{ "date": "2025-04-29", "count": 7 },
{ "date": "2025-04-22", "count": 5 },
{ "date": "2025-04-08", "count": 4 },
{ "date": "2025-04-01", "count": 6 },
{ "date": "2025-03-18", "count": 5 },
{ "date": "2025-03-12", "count": 3 },
{ "date": "2025-03-04", "count": 2 },
{ "date": "2025-02-25", "count": 3 },
{ "date": "2025-02-18", "count": 5 },
{ "date": "2025-02-11", "count": 7 },
{ "date": "2025-02-04", "count": 7 },
{ "date": "2025-01-28", "count": 5 },
{ "date": "2025-01-21", "count": 5 },
{ "date": "2025-01-14", "count": 8 }
],
"callsigns": [
"KD7XYZ",
"N0CALL",
"KI7ABC",
"W7BYU",
"KJ7DEF",
"KA6TST",
"W1RAD",
"KN7HAM"
"K7YLV",
"KF5FLJ",
"KG6EID",
"KI5TLZ",
"KI7NOX",
"KIK7WRR",
"KJ7LJU",
"KJ7ZTE",
"KK7BBR",
"KK7BBS",
"KK7DMH",
"KK7MMG",
"KK7STE",
"KK7TVJ",
"KK7YLV",
"KM7AYX",
"KM7BAS",
"KM7BBC",
"KM7BCG",
"KM7BOA",
"KO6GCM",
"KR4BWL",
"N7LRW",
"W7FR"
]
}