Merge branch 'main' into main

This commit is contained in:
Alex Ren 2025-06-04 19:40:33 -04:00 committed by GitHub
commit 38f95613fa
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
61 changed files with 1350 additions and 307 deletions

View file

@ -6,6 +6,15 @@ on:
branches: [ main ]
jobs:
lint_submissions:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: yaml-lint
uses: ibiqlik/action-yamllint@v3
with:
file_or_dir: submissions.yml
scan_ruby:
runs-on: ubuntu-latest

View file

@ -10,3 +10,7 @@
*/
@import "landing";
body {
font-family: "Poppins", sans-serif;
}

View file

@ -1,10 +1,12 @@
.markdown-content {
line-height: 1.5;
color: #dedae3;
line-height: 1.65;
font-size: 0.75rem;
font-weight: 400;
color: #ded9e5;
}
.markdown-content h1 {
font-size: 2.5rem;
font-size: 2.5em;
font-weight: bold;
color: #FFFFFF;
margin-bottom: 1.8rem;
@ -13,16 +15,16 @@
}
.markdown-content h2 {
font-size: 2rem;
font-weight: bold;
font-size: 2em;
font-weight: 600;
color: #FFFFFF;
margin-top: 1.75rem;
margin-bottom: 1.25rem;
}
.markdown-content h3 {
font-size: 1.75em;
font-weight: bold;
font-size: 1.5em;
font-weight: 600;
color: #FFFFFF;
margin-top: 1.5rem;
margin-bottom: 1rem;
@ -30,33 +32,46 @@
.markdown-content h4 {
font-size: 1.25em;
font-weight: 600;
font-weight: 550;
color: #86e3a8;
margin-bottom: 1rem;
}
.markdown-content p {
font-size: large;
font-size: 1rem;
margin-bottom: 1rem;
margin-top: 1rem;
font-family: "Poppins", sans-serif;
}
.markdown-content ul {
list-style-type: disc;
list-style-type: circle;
margin-left: 1.5rem;
margin-bottom: 1rem;
line-height: 2;
font-size: 1.1rem;
font-weight: 550;
font-size: 1rem;
}
.markdown-content ul:not(.markdown-content ul ul) {
/* padding-bottom: 1.5rem; */
list-style-type: disc;
}
.markdown-content ol {
list-style-type: decimal;
margin-left: 1.5rem;
margin-bottom: 1rem;
/* margin-bottom: 1rem; */
margin-top: 1rem;
line-height: 2;
font-size: 1.1rem;
font-weight: 550;
}
.markdown-content hr {
border: 0;
height: 6px;
background-color: #605989;
margin: 2rem 0;
}
.markdown-content blockquote {
border-left: 4px solid #ccc;
@ -65,34 +80,6 @@
font-style: italic;
}
div.markdown li {
display: list-item;
}
div.markdown ul {
display: block;
list-style-type: disc;
margin-top: 1em;
margin-bottom: 1em;
margin-left: 0;
margin-right: 0;
padding-left: 40px;
}
div.markdown ol {
display: block;
list-style-type: decimal;
margin-top: 1em;
margin-bottom: 1em;
margin-left: 0;
margin-right: 0;
padding-left: 40px;
}
div.markdown p:last-child {
padding-bottom: 5rem;
}
.markdown-content a {
color: #f583e4;
text-decoration: underline;
@ -107,26 +94,58 @@ div.markdown p:last-child {
}
.markdown-content strong {
font-weight: bold;
color: #86cfe5;
font-weight: 600;
color: #ffffff;
}
.markdown-content pre {
background-color: #3c3672;
color: #ffffff;
border-color:#d1cadb;
border-width: 1px;
color: #d1cadb;
padding: 1rem;
border-radius: 8px;
border-radius: 0px;
overflow-x: auto;
}
.markdown-content code {
background-color: #3c3672;
color: #ffffff;
font-size: 0.9rem;
padding: 0.2rem 0.4rem;
border-radius: 4px;
}
.project-img img {
width: 800px;
}
/*
div styling, probably don't need to touch this part.
*/
div.markdown li {
display: list-item;
}
div.markdown ul {
display: block;
list-style-type: disc;
margin-left: 0;
margin-right: 0;
padding-left: 40px;
}
div.markdown ol {
display: block;
list-style-type: decimal;
margin-left: 0;
margin-right: 0;
padding-left: 40px;
}
div.markdown p:last-child {
padding-bottom: 5rem;
}

View file

@ -9,6 +9,7 @@
@theme {
--font-dystopian: "Dystopian", sans-serif;
--font-poppins: "Poppins", sans-serif;
}
.glow {

View file

@ -1,6 +1,6 @@
class ApplicationController < ActionController::Base
# Only allow modern browsers supporting webp images, web push, badges, import maps, CSS nesting, and CSS :has.
allow_browser versions: :modern
# allow_browser versions: :modern
helper_method :current_user

View file

@ -2,11 +2,42 @@ module MarkdownRenderable
extend ActiveSupport::Concern
class_methods do
def render_markdown(text)
def render_markdown(text, user = nil, project_name = nil)
return "" if text.blank?
@markdown_renderer ||= Redcarpet::Markdown.new(
Redcarpet::Render::HTML,
renderer = if user && project_name
Class.new(Redcarpet::Render::HTML) do
def initialize(user, project_name)
@user = user
@project_name = project_name
super()
end
def image(link, title, alt_text)
# If the link is a relative path, rewrite it
unless link =~ %r{^https?://}
link = "/projects/#{@user}/#{@project_name}/#{link}"
end
"<img src=\"#{link}\" alt=\"#{alt_text}\" title=\"#{title}\">"
end
def postprocess(full_document)
# Only rewrite src attributes in img tags that don't already have the project path
full_document.gsub(/<img[^>]+src="([^"]+)"[^>]*>/) do |match|
src = $1
unless src =~ %r{^https?://} || src.start_with?("/projects/#{@user}/#{@project_name}/")
src = "/projects/#{@user}/#{@project_name}/#{src}"
end
match.gsub(/src="[^"]+"/, "src=\"#{src}\"")
end
end
end.new(user, project_name)
else
Redcarpet::Render::HTML
end
markdown = Redcarpet::Markdown.new(
renderer,
autolink: true,
tables: true,
fenced_code_blocks: true,
@ -18,13 +49,13 @@ module MarkdownRenderable
footnotes: true
)
@markdown_renderer.render(text).html_safe
markdown.render(text).html_safe
end
end
private
def render_markdown(text)
self.class.render_markdown(text)
def render_markdown(text, user = nil, project_name = nil)
self.class.render_markdown(text, user, project_name)
end
end

View file

@ -0,0 +1,2 @@
class GuidesController < MarkdownController
end

View file

@ -1,4 +1,6 @@
class ProjectsController < ApplicationController
include HasFrontmatter
def index
@projects = Project.all
@ -56,16 +58,6 @@ class ProjectsController < ApplicationController
}
end
def parse_frontmatter(content)
if content =~ /\A(---\s*\n.*?\n?)^(---\s*$\n?)/m
metadata = YAML.safe_load($1)
content = content[$2.size..-1]
[ metadata, content ]
else
[ {}, content ]
end
end
def render_not_found
render file: "#{Rails.root}/public/404.html", status: :not_found
end

View file

@ -1,12 +1,15 @@
class RsvpsController < ApplicationController
def create
@rsvp = Rsvp.find_or_create_by_email!(rsvp_params[:email])
Rsvp.invite_to_slack(rsvp_params[:email])
if @rsvp.airtable_record_id.blank?
@rsvp.update!(url_params: rsvp_params[:url_params])
end
redirect_to root_path, flash: { notice: "Thanks for your interest; check your email for next steps!" }
rescue ActiveRecord::RecordInvalid
redirect_to root_path, flash: { alert: "Please enter a valid email address." }
rescue => e
redirect_to root_path, flash: { alert: "#{e.message}" }
end
private

View file

@ -0,0 +1,2 @@
module GuidesHelper
end

View file

@ -3,26 +3,36 @@ class CloneProjectsJob < ApplicationJob
def perform
submissions = YAML.load_file(Rails.root.join("submissions.yml"))
submissions["projects"].each do |url|
urls = submissions["projects"].map do |url|
url = url.chomp("/")
url = "#{url}.git" unless url.end_with?(".git")
url
end
org, repo = url.gsub("https://github.com/", "").gsub(".git", "").split("/")
org = org.downcase
repo = repo.downcase
queue = Queue.new
urls.each { |url| queue << url }
target_dir = File.join(Rails.root, "content", "projects", org, repo)
threads = 5.times.map do
Thread.new do
while url = queue.pop(true) rescue nil
org, repo = url.gsub("https://github.com/", "").gsub(".git", "").split("/")
org = org.downcase
repo = repo.downcase
target_dir = File.join(Rails.root, "content", "projects", org, repo)
if Dir.exist?(target_dir) && Dir.exist?(File.join(target_dir, ".git"))
Rails.logger.info "Pulling latest for #{org}/#{repo}..."
system("cd '#{target_dir}' && git pull")
else
Rails.logger.info "Cloning #{org}/#{repo}..."
system("git clone #{url} '#{target_dir}'")
if Dir.exist?(target_dir) && Dir.exist?(File.join(target_dir, ".git"))
Rails.logger.info "Pulling latest for #{org}/#{repo}..."
system("cd '#{target_dir}' && git pull")
else
Rails.logger.info "Cloning #{org}/#{repo}..."
system("git clone #{url} '#{target_dir}'")
end
end
end
end
threads.each(&:join)
Rails.logger.info "Done cloning and updating all projects!"
end
end

View file

@ -0,0 +1,51 @@
module HasFrontmatter
extend ActiveSupport::Concern
class_methods do
def parse_frontmatter(content)
if content =~ /\A(---\s*\n.*?\n?)^(---\s*$\n?)(.*)/m
begin
metadata = YAML.safe_load($1)
metadata = {} unless metadata.is_a?(Hash)
rescue Psych::SyntaxError, StandardError => e
Rails.logger.warn "Failed to parse frontmatter: #{e.message}"
metadata = {}
end
content = $3
[ safe_parse_metadata(metadata), content ]
else
[ {}, content ]
end
end
private
def safe_parse_metadata(metadata)
{
"title" => safe_parse_field(metadata, "title"),
"author" => safe_parse_field(metadata, "author"),
"description" => safe_parse_field(metadata, "description"),
"created_at" => safe_parse_date(metadata, "created_at")
}
end
def safe_parse_field(metadata, field)
return nil unless metadata.is_a?(Hash)
value = metadata[field]
return nil if value.nil?
value.to_s.strip
end
def safe_parse_date(metadata, field)
return nil unless metadata.is_a?(Hash)
value = metadata[field]
return nil if value.nil?
begin
Date.parse(value.to_s)
rescue Date::Error
nil
end
end
end
end

View file

@ -1,5 +1,6 @@
class Project
include MarkdownRenderable
include HasFrontmatter
attr_reader :user, :project_name, :title, :author, :description, :created_at, :content
def initialize(attributes = {})
@ -12,6 +13,14 @@ class Project
@content = attributes[:content]
end
def self.highlighted_projects
@highlighted_projects ||= YAML.load_file(Rails.root.join("config/highlighted_projects.yml"))
end
def is_highlighted?
self.class.highlighted_projects.include?(github_slug)
end
def name
title.presence || project_name.titleize
end
@ -35,6 +44,7 @@ class Project
def created_at_date
return nil unless created_at
return created_at if created_at.is_a?(Date)
Date.parse(created_at)
rescue Date::Error
nil
@ -125,19 +135,7 @@ class Project
author: metadata["author"],
description: metadata["description"],
created_at: metadata["created_at"],
content: render_markdown(markdown_content)
content: render_markdown(markdown_content, user, project_name)
)
end
private
def self.parse_frontmatter(content)
if content =~ /\A(---\s*\n.*?\n?)^(---\s*$\n?)(.*)/m
metadata = YAML.safe_load($1)
content = $3
[ metadata, content ]
else
[ {}, content ]
end
end
end

View file

@ -7,6 +7,45 @@ class Rsvp < ApplicationRecord
find_or_create_by!(email: email.downcase.strip)
end
def self.invite_to_slack(email)
channels = [
"C75M7C0SY", # #welcome
"C039PAG1AV7", # #slack-welcome-start
"C08Q1H6D79B", # #highway
"C08PJ6G88QN", # #highway-announcements
"C08S22XRYMU" # #highway-pitstop
].join(",")
uri = URI("https://slack.com/api/users.admin.inviteBulk")
headers = {
"Cookie" => "d=#{ENV.fetch('SLACK_COOKIE')}",
"Content-Type" => "application/json",
"Authorization" => "Bearer #{ENV.fetch('SLACK_BROWSER_TOKEN')}"
}
data = {
token: ENV.fetch("SLACK_BROWSER_TOKEN"),
invites: [
{
email: email,
type: "restricted",
mode: "manual"
}
],
restricted: true,
channels: channels
}
http = Net::HTTP.new(uri.hostname, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri, headers)
request.body = data.to_json
response = http.request(request)
j = JSON.parse(response.body)
raise "Slack API general error: #{j['error']}" unless j["ok"]
raise "Slack API error: successful but no invites" if !j["invites"] || j["invites"].empty?
raise "Slack API error on invite: #{j["invites"][0]["error"]}" unless j["invites"][0]["ok"]
{ ok: true }
end
def sync_with_airtable!
uri = URI("https://api.airtable.com/v0/appuDQSHCdCHyOrxw/tblhGTc3WX9nYzU18")

View file

@ -5,14 +5,16 @@
<%= link_to "Overview", advanced_page_path("overview"), class: "#{current_page?(advanced_page_path("overview")) ? 'bg-[#564CAD]' : 'hover:bg-[#564CAD]'} bg-[#2E2A54] p-2 px-6 rounded transition duration-100 block font-dystopian" %>
<%= link_to "Project Guidelines", advanced_page_path("project-guidelines"), class: "#{current_page?(advanced_page_path("project-guidelines")) ? 'bg-[#564CAD]' : 'hover:bg-[#564CAD]'} bg-[#2E2A54] p-2 px-6 rounded transition duration-100 block font-dystopian" %>
<%= link_to "Submitting", advanced_page_path("submitting"), class: "#{current_page?(advanced_page_path("submitting")) ? 'bg-[#564CAD]' : 'hover:bg-[#564CAD]'} bg-[#2E2A54] p-2 px-6 rounded transition duration-100 block font-dystopian" %>
<p class="text-sm font-bold mt-6 text-left align-left">More resources:</p>
<%= link_to "Part Sourcing", advanced_page_path("part-sourcing"), class: "#{current_page?(advanced_page_path("part-sourcing")) ? 'bg-[#564CAD]' : 'hover:bg-[#564CAD]'} bg-[#2E2A54] p-2 px-6 rounded transition duration-100 block font-dystopian" %>
<%= link_to "Design Guide", advanced_page_path("design-guide"), class: "#{current_page?(advanced_page_path("design-guide")) ? 'bg-[#564CAD]' : 'hover:bg-[#564CAD]'} bg-[#2E2A54] p-2 px-6 rounded transition duration-100 block font-dystopian" %>
<%# <%= link_to "Communities", advanced_page_path("communities"), class: "#{current_page?(advanced_page_path("submit")) ? 'bg-[#564CAD]' : 'hover:bg-[#564CAD]'} bg-[#2E2A54] p-2 rounded transition duration-100 block" %>
<%# <%= link_to "FAQ", advanced_page_path("faq"), class: "#{current_page?(advanced_page_path("submit")) ? 'bg-[#564CAD]' : 'hover:bg-[#564CAD]'} bg-[#2E2A54] p-2 rounded transition duration-100 block" %>
</div>
<%= link_to "Start your design", advanced_page_path("design-guide"), class: "#{current_page?(advanced_page_path("design-guide")) ? 'bg-[#564CAD]' : 'hover:bg-[#564CAD]'} bg-[#2E2A54] p-2 px-6 rounded transition duration-100 block font-dystopian" %>
<p class="text-sm font-bold mt-6 text-left align-left">Extra info:</p>
<%= link_to "Part Sourcing", advanced_page_path("part-sourcing"), class: "#{current_page?(advanced_page_path("part-sourcing")) ? 'bg-[#564CAD]' : 'hover:bg-[#564CAD]'} bg-[#2E2A54] p-2 px-6 rounded transition duration-100 block font-dystopian" %>
<%= link_to "Resources & tips", advanced_page_path("resources"), class: "#{current_page?(advanced_page_path("resources")) ? 'bg-[#564CAD]' : 'hover:bg-[#564CAD]'} bg-[#2E2A54] p-2 px-6 rounded transition duration-100 block font-dystopian" %>
<%= link_to "What is shipping?", advanced_page_path("shipping"), class: "#{current_page?(advanced_page_path("shipping")) ? 'bg-[#564CAD]' : 'hover:bg-[#564CAD]'} bg-[#2E2A54] p-2 rounded transition duration-100 block font-dystopian" %>
<%= link_to "Project ideas", advanced_page_path("ideas"), class: "#{current_page?(advanced_page_path("ideas")) ? 'bg-[#564CAD]' : 'hover:bg-[#564CAD]'} bg-[#2E2A54] p-2 rounded transition duration-100 block font-dystopian" %>
<%= link_to "Troubleshooting", advanced_page_path("troubleshooting"), class: "#{current_page?(advanced_page_path("troubleshooting")) ? 'bg-[#564CAD]' : 'hover:bg-[#564CAD]'} bg-[#2E2A54] p-2 rounded transition duration-100 block font-dystopian" %>
<%# <%= link_to "Other communities", advanced_page_path("faq"), class: "#{current_page?(advanced_page_path("submit")) ? 'bg-[#564CAD]' : 'hover:bg-[#564CAD]'} bg-[#2E2A54] p-2 rounded transition duration-100 block font-dystopian" %>
</div>
</div>
</div>

View file

@ -1,5 +1,44 @@
# Designing your own project!
# Designing your own projects
Here's a quick guide on how to design your own projects!
Designing your own projects is really, *really* hard. Here's my best explainer at what the process sort of looks like, but every person's process is different! You'll have to figure a lot of this stuff out on your own.
# COMING SOON
## Overview
You can split this entire process up into approximately 4-5 different steps, depending on what the project is.
During this entire process you're going to have to do a LOT of research on sourcing parts and what the pros and cons of getting each would be. During this time, PLEASE check out the [Part Sourcing](advanced/part-sourcing) guide to get a better idea of the options
---
### 1. Vision, ideas, and outline
This is the first step of the process! During this time, you should figure out what you want your project should be, the constraints, and specific features you want.
---
### 1.1. Electrical component selection & sourcing
Next up is to pick the components for that
Try to avoid getting hung up passives. If there's multiple parts that are the same functionality
For actual sourcing & finding links, please refer to the [Part Sourcing](advanced/part-sourcing) guide
---
### 2. CAD
---
### 4. PCB
---
### 5. Firmware
---
## Closing words
Keep in mind that almost every step above will be connected with each other. That means edits in #5 will mean you have to change #2, which might change #4, and then #2, etc. Hardware projects are *hard*. There's a lot of iteration involved. Good luck!

View file

@ -0,0 +1,32 @@
# Getting project ideas
Brainstorming can be *really* hard - here's some help on coming up with ideas!
*this document will be updated as the event runs*
### From Hack Club
Here's a list of ideas that we personally think would be cool to make!
***Really* cool ideas**
- Your own custom hacker badge to bring to the event! (reference [here](https://github.com/badger/home))
- Devboards! (ESP32, CHV32v307, NRF52840, etc)
- Claw machine for prizes
- PCB Mill
- Protogen head
- Feel free to add more suggestions!
**Less cool** (but still cool!!)
- 3D printer mods
- 2D plotter
- PCB Hotplate
Doing these does *not* guarantee your project will be approved! There's still a minimum quality bar for each project
### General tips
Here's some more general tips for coming up with ideas:
- Adafruit has a ton of awesome projects - you can't copy them directly, but you're more than free to take inspo from them
- Do a lot of sketching! Putting stuff down on paper helps a *lot* with thinking since you don't have to come up with it all in your head

View file

@ -0,0 +1 @@
asdf

View file

@ -1,2 +0,0 @@
# Alex's miscellaneous tips
Here's a quick braindump of useful stuff that I've found useful over the years. Will be continuously added to

View file

@ -4,46 +4,34 @@ Decided to make a custom project? Awesome! Right this way.
Whatever that one project you've been thinking of doing forever - whether that be a custom 3D printer, a full mechanical keyboard, or something else - now's your chance to make that real
You can choose from one of the following tiers:
- 4 point project with up to $50 USD in funding
- 6 point project with up to $150 USD in funding (ex: keyboard, rp2040 devboard keychain)
- 10 point project with up to $350 USD in funding (ex: 3D printer, antweight combat robot)
The more points a project is worth, the higher the complexity & quality requirements will be. Please read over the [Project guidelines](/advanced/project-guidelines) to get a better idea of what they are
Before you go crazy with ideas though - please be resourceful! This is **not** a free money glitch. [Hack Club](https://hackclub.com) is a financially limited non profit, and every dollar we can save together goes towards the next program.
Any questions? Join the #highway channel in slack!
**Before starting your project, please read over the [Project Guidelines](/advanced/project-guidelines) and [Submission Info](/advanced/submitting) pages so that you have an idea of what you're doing**
Any questions? Ask in the [#highway](https://hackclub.slack.com/archives/C08Q1H6D79B) channel in slack!
---
### Here's how to get started:
## Here's how it works:
1. Make a new GitHub repository for it! This will be where you add your project
2. Start a journal by creating a file called JOURNAL.md and commit it
3. Make a [pull request](https://github.com/hackclub/highway/tree/main) to **add your project to the site gallery**!
4. Start designing your project! Journal each day you work on it!
5. [Submit](/advanced/submitting) your project when you're done
6. If you're accepted, we'll give you the grant!
**To add your project to the site gallery, head on over to the [submissions.yml](https://github.com/hackclub/highway/blob/main/submissions.yml) in the site's repository and add your repo URL:**
### 1. Set up your project & add it to the gallery
```
projects:
- "https://github.com/Dongathan-Jong/SpotifyDisplay"
- "your_repo_link"
```
<br>
As long as your PR doesn't have any conflicts, we'll merge it and your submission will be added to the project list! Other people will be able to see your journal & see what you're up to.
Before you start working on your project, you need to do some setup:
After that, you're done! You can move onto designing.
#### 1. Create a git repository for your project
**Check out projects others have started in the [Gallery](/projects)!**
Create a repository for your project! Most people use GitHub, but you can use any git provider you want
Each project you design that is approved gets you **6 points**, or **10 points** if you build an extra advanced project (scroll to bottom)
#### 2. Start your journal
---
### On Journaling
This is *the* most important part of the whole process! Journaling your progress is how to keep track of how your project is going. Beyond that, it's also a way to tell a story and have something to look back at many years down the line.
At the top of your JOURNAL.md file, include this metadata *(include the quotation marks)*:
Next, start a journal by creating a JOURNAL.md file in your repo. At the very top, include the following data:
```
---
@ -53,8 +41,48 @@ description: "Describe your project in a short sentence!"
created_at: "2024-03-20"
---
```
<br>
Journaling is mandatory for custom projects.
#### 3. Make a PR to add it to the gallery
Next, add it to the gallery! Make a pull request to the [submissions.yml](https://github.com/hackclub/highway/blob/main/submissions.yml) file in the site's repository and add your project's URL
```
projects:
- "https://github.com/Dongathan-Jong/SpotifyDisplay"
- "your_repo_link"
```
<br>
As long as your PR doesn't have any conflicts, we'll merge it and your submission will be added to the project list! Other people will be able to see your journal & see what you're up to.
### 2. Start designing!
Start designing your project! Check out the resources on the left side for inspo, part sourcing, etc
Make sure to read over the [project guidelines](/advanced/project-guidelines) page of the website to get an idea of what you should build!
### 3. Submit your design
The submission form is located in the instructions in the [Submitting](/advanced/submitting) page. READ THE INSTRUCTIONS. DO NOT BLINDLY SUBMIT
### 4. Get a grant to build it!
Once you're approved, you'll get an HCB Credit Card with the funding you submitted for, and a *half* of the points that your project is worth
### Submit your finished project
To collect the other half of your points, you need to actually submit your physically built project! To do so, fill out the following form:
(form WIP, will be out when people are done projcts)
---
### On Journaling
This is *the* most important part of the whole process! Journaling your progress is how to keep track of how your project is going. Beyond that, it's also a way to tell a story and have something to look back at many years down the line.
Don't just journal your wins! It's much, *much* better to maintain a smaller, more consistent one every day - it'll capture a more realistic story to what things were really like. Fails are important too.
Journaling is **mandatory** to get your submission approved! Poor quality journals will be rejected.
@ -77,7 +105,7 @@ Do NOT have:
- Wall of timestamps with barely any descriptions
- No images
- Terrible formatting that's impossible to read
- AI generated journal entries; anything written by AI will be automatically rejected
- AI generated journal entries; anything written by AI will be immediately rejected
Generally, it's OK if english isn't your first language and you're not the best at it. We're not marking you on your writing skills! What does matter is you try your best, the words are your own (no generative AI), and it's legible.
@ -91,22 +119,6 @@ Most projects (keyboards, game consoles, custom devboards, etc) can all be built
Some projects though are above and beyond - a DIY 5-axis 3D printer, a go-kart from scratch, etc take significantly more time, require a larger budget, and are overall a lot harder to execute.
These projects should not be attempted unless you have *some* sort hardware experience in the past - even if it's just a starter project
**If you think you have the idea & ability to execute:**
Pitch your idea in [#highway-pitstop](https://hackclub.slack.com/archives/C08S22XRYMU) with:
- A very brief description of what it is
- Rough BOM w/ costs
- What specifically you would have to design & what the process would look like - KEEP IT VERY BRIEF, BULLET POINTS ONLY
- If applicable, link a couple references of what you're thinking of
- 1-2 past projects you've made that gives you the confidence to pull this off
- Why the complexity warrants 10 points
Even if the project would fit under $150, if it's particularly complicated (beyond the standard project guidelines) then you should still pitch it in pitstop! Worst case you get some feedback on your idea
Please format your pitch with bolded text, bullet points, etc to make it easier to parse
**@alexren will respond with whether it's approved. Do not start if you are not approved**
If this is you, then pitch your project in [#highway-pitstop](https://hackclub.slack.com/archives/C08S22XRYMU) when you're almost done!
Even if the project would fit under $150, if it's particularly complicated (beyond the standard project guidelines) then you should still pitch it in pitstop! Worst case you get some feedback on your project so far

View file

@ -31,7 +31,7 @@ Generally speaking, try to reference parts off of other projects since you'll el
Almost always the cheapest option is to get it from AliExpress; the only downside is that shipping *may* take awhile - usually a 2-3 week buffer is safe.
If you're in a pinch, Amazon actually has OK prices all things considered. I would avoid it though unless you're going to miss Undercity if you don't
If you're in a pinch, Amazon actually has OK prices all things considered. I would avoid it though, unless you're going to miss Undercity if you don't use them
### SBCs (Raspberry Pi, Orange Pi, etc)
Raspberry Pi
@ -46,24 +46,33 @@ Arduinos are fairly outdated by todays standards
### PCBs
- If you're in India, use SEEED. They take HCB cards and are by far the cheapest option
- If you're from another country, use JLCPCB, they offer pcbs for under $6 shipped as long as its under 100x100mm
- If you're from the US specifically, use PCBWAY. They're roughly half the cost of JLCPCB because they're able to avoid tarrifs some how
- If you're in India, use [SEEED Studio's Fusion Service](https://www.seeedstudio.com/fusion_pcb.html). They take HCB cards and are by far the cheapest option
- If you're from another country, use JLCPCB, they offer PCBs for under $6 shipped as long as its under 100x100mm
- If you're from the US specifically, use PCBWAY. They're roughly half the cost of JLCPCB because they're able to avoid tariffs somehow
- Read here: [link](https://www.pcbway.com/blog/News/Impact_of_the_New_U_S_Tariff_Policy_on_Customs_Clearance_51dff4fd.html)
### Batteries (Li-Po, CR2032, AA, etc)
## Specific countries
## Country Specific Notes
### India:
- Most vendors do not take int'l cards, which unfortunately HCB falls into the category of. Contact your local vendors to try to get that changed!
- Most vendors do not take international cards [cards issued outside India], which unfortunately HCB falls into the category of. Contact your local vendors to try to get that changed!
- Here are some vendors that are documented to work with HCB cards currently, segregated into categories
* Electronic parts (RPIs, modules, power supplies and the like)
* [Silverline Electronics](https://www.silverlineelectronics.in/)
* [RoboSap](https://robosap.in/)
* [RoboticsDNA](https://roboticsdna.in/)
* [EBhoot](https://ebhoot.in/)
* [Novo3D](https://novo3d.in/)
* 3D printed parts (3D printing as a Service, JLC3DP-alike)
* [3Ding](https://www.3ding.in/)
> contribute here!! We're missing a ton of stuff
> confirmed more vendors? wanna add specific notes for your country? contribute [here](https://github.com/hackclub/highway/edit/main/app/views/advanced/part-sourcing.md)!! You'd be helping a ton of people!
## Tips for specific vendors
### AliExpress
aliexpress is one of the highest skill ceiling stores out there - there's a ton of optimization you can do. Here's some tips:
Aliexpress is one of the highest skill ceiling stores out there - there's a ton of optimisation you can do. Here's some tips:
- The welcome deal only works once when you make your account, so don't budget off of that - you will be hit by significantly higher prices afterwards.
- Pay attention to the estimate shipment date. This will vary by region, but generally speaking it's actually fairly reliable
@ -78,4 +87,4 @@ COMING SOON!
<!-- ### VORON Sourcing guide
### ANNEX ENGINEERING Sourcing guide -->
### ANNEX ENGINEERING Sourcing guide -->

View file

@ -1,24 +1,16 @@
# Project Guidelines
If you're wondering what you're allowed to build, the bottom line is this:
If you're wondering what you're allowed to build, here's a quick guide on what we generally look for! Please keep in mind these are just guidelines, so always feel free to ask in #highway!
Build something *awesome*, something that you would be proud to keep in your room for the next 5 years, and something that you would be proud to show other people.
*above all though, the bottom line is this: build something awesome, something that you would be proud to keep in your room for the next 5 years, and something that you would be proud to show other people*
Let's get teenagers to be the ones to make the best projects yet.
---
## Overview
Here's an overall list of what is allowed / isn't allowed for your project! Keep in mind these are just guidelines
Generally speaking, each project must be closer to a product than a demo - that doesn't mean go ultra advertising mode, but that does mean that a breadboarded together project with no case *doesn't* count.
Here's an overall list of criteria that applies to all tiers, regardless of your budget/points.
### Complexity
A custom project should include each of the following:
- A case / cover / some sort of physical part
- A custom PCB (unless you REALLY don't need it)
- Ideally some sort of software config / cronjob / tool that is beyond the defaults of whatever you're doing
### Originality
### Originality & idea
Almost every idea out there has been thought of before - what matters is that when designing it, which means that you do *not* do the following:
@ -28,6 +20,40 @@ Almost every idea out there has been thought of before - what matters is that wh
- Directly copy paste 3D printed / manufactured models (reference parts are OK)
- **In general, do not copy paste stuff directly - use them as references**
Generally speaking, each project must be closer to a product than a demo - that doesn't mean go ultra advertising mode, but that does mean that a breadboarded together project with no case *doesn't* count
(more to be added)
---
## Tiers & examples
**I want to make it clear that there is *no* idea that wouldn't qualify for at least 6 points. It's all about how you implement it and the level polish you add**
### 4 points ($50, 8-20 hours)
This is the cheapest tier. It's meant for smaller projects that take roughly 8-12 hours to design & physically build. Examples include:
- DIY Macropad
- Small mini PCB business card
### 6 points ($150, 20-50 hours)
This is the middle tier! It's where most projects should fall under. Generally speaking, you're expected to have both a set of electronics and 3D modelled case, unless you have a particularly complex PCB (i.e a devboard)
Examples include:
- DIY Game console w/ case
- DIY minecraft jukebox
- Full split keyboard
- DIY PC audio to FM radio usb adapter
### 10 points ($350, 50-200+ hours)
This is the highest tier. It's for projects that take anywhere from 50-200+ hours. Many of these take multiple iterations to contiunously build and work on. These are usually CAD heavy, as PCBs are very hard to iterate on unless you have an SMD setup
- Custom 3D printer
- Battlebot with custom attachments
---
## Examples
**Here are some examples of great projects by Hack Clubbers:**

View file

@ -0,0 +1,46 @@
# Alex's tips n' resources
Here's a quick braindump of useful stuff that I've found useful over the years. Will be continuously added to as highway goes on!
## Generally useful stuff
- Search stuff up! Again and again and again. You'll have to do a *lot* of the learning yourself so its on you
## Software
- For 3D modelling, use either Fusion360 or Onshape!
- For PCB design, use KiCAD! It's free, open source, and works on any platform.
- [Excalidraw](https://excalidraw.com/) is an awesome site for making really quick **sketches** that look good
## Project design
- Adafruit projects give you a really good idea of how different hardware projects might fit together.
## Tips
- If you're stuck picking between a bunch of passives that are all functionally the same (i.e 30 different types of capacitors), start with the CAD and work backwards - it'll help you get an idea of which one would physically look the best.
- If you're building a 3D printer, [infill](https://infill.hackclub.com) was a 3D printer YSWS that ran recently. There's a TON of resources on the website!
## Technical resources
- Adafruit projects are extremely good for looking at what's behind-the-scenes of hardware projects
## Software
## Other communities
### General
- reddit!
### 3D printing
- VORON discord
-
### Battlebots
- Botrumble
### Keyboards
- QMK discord
- r/mechanicalkeyboards
### Discords
### Subreddits
- Keyboards
- Mechanical

View file

@ -0,0 +1,48 @@
# What is shipping?
Hi there! This page is my best attempt at explaining the age old question of, *"what on earth is shipping??"*
In short, **shipping is process of actually making your project sharable**. It's *the* most important part of your project, almost as important as the entire project itself
When you first make something, usually it just lives as a file on your computer. This is bad because only YOU can access it\! Nobody else can see it. Not only that, but when you look back at the project a few years from now itll be very, *very* difficult to remember anything about it\! *Its not real*
Shipping (at least in this context context) involves publishing your design out there for the world to see. Making it very real. This involves a couple steps:
- **Documenting what your project actually is:**
- A quick story/motivation on how the project came to be
- A description of what the project does
- A quick brief on how it all fits together
- Some pictures of the design
- **Making all files & resources easily accessible & organized**
- **Putting it on a platform that's easily shareable (i.e github, printables, etc)**
---
**Here are some great examples of shipped projects**. Notice how the files are organized using folders, and, more importantly, its well documented what the project is about and what you can do with it!
**Keyboards & Macropads:**
- [Seigaiha Keyboard](https://github.com/yiancar/Seigaiha)
- [Ducky Pad](https://github.com/dekuNukem/duckyPad)
**3D printers:**
- [Voron 0](https://github.com/VoronDesign/Voron-0)
- [Annex K3](https://github.com/Annex-Engineering/Gasherbrum-K3)
**Misc projects:**
- [PiGRRL](https://github.com/adafruit/Adafruit-PiGRRL-PCB) Game console
- [Nevermore filters](https://github.com/nevermore3d/Nevermore_Micro) (Ill admit \- this one is a little excessive)
**When you make your repository nothing but a dump of files and 2 sentences for a README**, what happens is that its hard for other people to recognize your work, nor does it make it easy to learn from. *Its not real*. It only lives on in your tiny corner of this earth.
---
*Unfortunately we also can't accept non shipped projects since it'd be impossible to tell what you even made. Make sure to ship your projects!*
Hopefully you got through this document. If theres any questions let me know.

View file

@ -1,4 +1,4 @@
<div class="markdown-content 2xl:max-w-6xl max-w-5xl mx-16">
<div class="markdown-content font-poppins 2xl:max-w-6xl max-w-5xl md:mx-8 xl:ml-0 md:ml-16 mx-2">
<%= raw @content %>
</div>

View file

@ -1,39 +1,80 @@
# Submitting your project!
If you're done your project, here's how to submit!
If you're done your project, here's how to submit! Please read carefuly.
## Check that you have everything necessary
Before you submit anything, you should post your project in #highway for feedback! That way, you can make your project as good as it can be before submitting
Before submitting, please make sure of the following:
---
- **Your GitHub repository has all of the necessary files:**
- a BOM in CSV format
## Requirements
Before submitting, please *absolutely* make sure of the following:
- **Your project has a journal in the [gallery](/projects)**
- **Your GitHub repository has all of your project files:**
- a BOM, in CSV format in the root directory
- the source files for your PCB, if you have one
- the source files for your CAD model,
- ANY other files that are part of your project
- the source files for your CAD model, if you have one
- ANY other files that are part of your project.
- **In your GitHub README.md file:**
- Description of your project
- Your BOM in table format, include as columns:
- Item name
- What the item is for in your project
- Item source
- Item price (include shipping + taxes)
- Total price
- Screenshot of your project - schematic, PCB, CAD, whatever you made!
- **In your GitHub journal.md file:**
- Your journals!
- Put your total time spent at the top
- A description of what your project is
- A couple sentences on *why* you made the project
- **PICTURES OF YOUR PROJECT**
- A screenshot of a full 3D model with your project
- A screenshot of your PCB, if you have one
- A wiring diagram, if you're doing any wiring that isn't on a PCB
- A BOM in table format at the end of the README
- **In your GitHub JOURNAL.md file:**
- Journal entries with the following:
- Date written
- Time spent
- Pictures/videos of what you're working on
- Your total time spent at the top of the file
## Fill out the form
**Not doing any of the above will automatically get your project rejected. DO NOT FORGET ANY OF THESE**
**Submit here:** [https://forms.hackclub.com/highway](https://forms.hackclub.com/highway)
---
It'll send over your project to our queue to be approved!
## Submitting
We'll try to get back to you within a few days.
Once you are absolutely sure you have met the above requirements, post your project in #highway-pistop! Here's what you should include:
```
**Name of project: **
*GitHub Repository Link: **
Description:
(pictures of your project)
```
Once you're done that, fill out the following form:
[https://forms.hackclub.com/highway](https://forms.hackclub.com/highway)
It'll send over your project to our queue to be approved! When we review it, you'll get a reply on your message in #highway-pitstop!
We'll try to get back to you within 3-4 weekdays.
_**Please do *not* use #highway-pitstop for anything other than submitting**_
## Next steps
If you get approved, you'll get an email to let you know! You'll get a follow-up form asking for your address & personal info
If you get approved, you'll get an HCB card grant in your email within 24 hours!
**If it gets rejected, you'll have to wait 1 week before submitting another review.** Make it better while you're waiting!
**If it gets rejected, you'll have to wait 1 week before being re-reviewed. DO NOT FILL OUT A NEW FORM**
You'll get 50% of the points your project is worth when you ship the design!
---
## Submitting your final build
Finished building your project IRL?
Two things you need to do:
1. Post a demo on Reddit! Here's an [example of a post by @cyao](https://www.reddit.com/r/embedded/comments/1kwx5p7/i_built_the_fpga_raspberry_pi_zero_equivalent/).
2. For those who made a custom project - make a magazine page for it! Instructions on this [Figma design file](https://www.figma.com/design/JrUtKGmZKVaT8t2z12oybV/magazine-?node-id=0-1&t=qPMHT9OHuyUDMGj8-1) - we're going to physically print out a magazine, where each page has a project on it.
Then, fill out the [Demo Form](https://forms.hackclub.com/highway-demo) - we'll look at it in a few days and let you know if it's been approved!

View file

@ -0,0 +1,13 @@
# Alex's tips n' tricks
Here's a quick braindump of useful stuff that I've found useful over the years. Will be continuously added to as the event goes on
## General
- If you're stuck picking between a bunch of passives that are all functionally the same (i.e 30 different types of capacitors), start with the CAD and work backwards - it'll help you get an idea of which one would physically look the best.
- If you're building a 3D printer, [infill](https://infill.hackclub.com) was a 3D printer YSWS that ran recently. There's a TON of resources on the website!
## Technical resources
- Adafruit projects are extremely good for looking at what's behind-the-scenes of hardware projects
## Software
- [Excalidraw](https://excalidraw.com/) is an awesome site for making really quick sketches that look good

View file

@ -0,0 +1,24 @@
# Troubleshooting
You're going to run into a LOT of issues while working on your project! That's okay - here's some general troubleshooting tips!
## General tips
- Before trying anything else, SEARCH. IT. UP. Google whatever issue you might have going on.
## Asking for help
Sometimes a quick search will give you absolutely nothing, and you'll be stuck! Not to worry - that's what the community is here for!
To make it as easy as possible to ask for help, **you should include the following:**
- Context as to what you're building & what you're trying to do
- Screenshots/pictures of your problem
- A link to your GitHub repository
## Other communities
Hack Club is a *great* place, but the the truth is that we're really small too! One of the best ways to learn is to immerse yourself in other communities. Here are some other great places to ask for help:

View file

@ -8,14 +8,34 @@
<p class="text-4xl font-bold font-dystopian text-center">Events</p>
<p class="mt-2 opacity-80 text-center">Check this page for events - like game nights, speedruns, showcases, and more - that we'll be hosting throughout Highway!</p>
<p class="opacity-60 text-center">Note that events default to 0 points given unless otherwise stated.</p>
<p class="mt-2 opacity-60 text-center"><i>Sorted by recent.</i></p>
<div class="mt-8 grid grid-cols-1 gap-8">
<%# strange parts ama %>
<div class="flex flex-col p-8 rounded max-w-5xl border-[#544FFF] border-4 hover:bg-[#3E399C] bg-[#2E2C72] transition-colors duration-150">
<p class="text-2xl font-bold">Strange Parts AMA @ Friday May 30, 6PM EDT!</p>
<p class="opacity-50 mb-2"><i>Posted 27/5/2025</i></p>
<hr class="border-t-2 border-[#544FFF] mb-4 opacity-60">
<div class="space-y-2 opacity-80 mb-4">
<p><a href="https://www.youtube.com/@StrangeParts" class="underline font-bold text-pink-300 hover:decoration-wavy" rel="noopenner noreferrer" target="_blank">Strange Parts</a> is a Youtuber with 1.96 <i>million</i> subscribers! His most watched video has 28 million views, where he
<a href="https://www.youtube.com/watch?v=leFuF-zoVzA" class="underline font-bold text-pink-300 hover:decoration-wavy" rel="noopenner noreferrer" target="_blank">made his own iPhone in China</a>.
He has also <a href="https://www.youtube.com/watch?v=ljOoGyCso8s" class="underline font-bold text-pink-300 hover:decoration-wavy" rel="noopenner noreferrer" target="_blank">toured the JLCPCB factory on video</a>,
<a href="https://www.youtube.com/watch?v=utfbE3_uAMA" class="underline font-bold text-pink-300 hover:decoration-wavy" rel="noopenner noreferrer" target="_blank">modded an iPhone to have a headphone jack</a>, among <i>many</i> other videos.</p>
<p>AMA stands for <i>Ask Me Anything</i>; it's an hour-long session on Zoom where <i>YOU</i> can ask Strange Parts anything! From how he got started in tech, to tips he has for overcoming technical hurdles, to what his opinion on the latest hardware is. He'll be there to interact with you - LIVE!</p>
<p>Come prepared with your questions! <i>Zoom link will be sent by email day-of.</i></p>
</div>
<%= image_tag "/strangeparts2.png", style: "", class: "" %>
</div>
<%# kickoff call %>
<div class="flex flex-col p-8 rounded max-w-5xl border-[#544FFF] border-4 hover:bg-[#3E399C] bg-[#2E2C72] transition-colors duration-150">
<p class="text-2xl font-bold">Join us for the Kickoff Call @ Friday May 23, 7PM EST!</p>
<p class="text-2xl font-bold">Join us for the Kickoff Call @ Friday May 23, 7PM EDT!</p>
<p class="opacity-50 mb-2"><i>Posted 13/5/2025</i></p>
<hr class="border-t-2 border-[#544FFF] mb-4 opacity-60">
<div class="space-y-2 opacity-80 mb-4">
@ -24,9 +44,7 @@
<p>Feel free to start working on your project and journaling before this call!</p>
<p class="font-bold"><i>You'll also get one (1) free point to Undercity for joining!</i></p>
</div>
<%= image_tag "/event1kickoff2.svg", style: "", class: "" %>
<%= image_tag "/eventkickoff2.png", style: "", class: "" %>
</div>

View file

@ -0,0 +1,17 @@
<div class="border-t-4 md:border-t-0 md:border-r-4 border-[#2E2A54] text-white h-full flex flex-col gap-4 justify-start mt-8 fixed">
<div class="flex flex-col justify-start p-8">
<div class="text-center grid grid-cols-1 gap-2 text-xl">
<%# link_to "Projects", projects_path, class: "#{current_page?(projects_path) ? 'bg-[#564CAD]' : 'hover:bg-[#564CAD]'} bg-[#2E2A54] p-2 rounded transition duration-100 block" %>
<%= link_to "Overview", guides_page_path("overview"), class: "#{current_page?(guides_page_path("overview")) ? 'bg-[#564CAD]' : 'hover:bg-[#564CAD]'} bg-[#2E2A54] p-2 px-6 rounded transition duration-100 block font-dystopian" %>
<%# <%= link_to "Project Guidelines", guides_page_path("project-guidelines"), class: "#{current_page?(guides_page_path("project-guidelines")) ? 'bg-[#564CAD]' : 'hover:bg-[#564CAD]'} bg-[#2E2A54] p-2 px-6 rounded transition duration-100 block font-dystopian" %>
<%# <%= link_to "Submitting", guides_page_path("submitting"), class: "#{current_page?(guides_page_path("submitting")) ? 'bg-[#564CAD]' : 'hover:bg-[#564CAD]'} bg-[#2E2A54] p-2 px-6 rounded transition duration-100 block font-dystopian" %>
<p class="text-sm font-bold mt-6 text-left align-left">The guides!</p>
<%= link_to "Game Console", guides_page_path("game-console"), class: "#{current_page?(guides_page_path("game-console")) ? 'bg-[#564CAD]' : 'hover:bg-[#564CAD]'} bg-[#2E2A54] p-2 px-6 rounded transition duration-100 block font-dystopian" %>
<%# <%= link_to "Other communities", guides_page_path("faq"), class: "#{current_page?(guides_page_path("submit")) ? 'bg-[#564CAD]' : 'hover:bg-[#564CAD]'} bg-[#2E2A54] p-2 rounded transition duration-100 block font-dystopian" %>
</div>
</div>
</div>

View file

@ -0,0 +1,103 @@
# Game console
#### Tier 2 project (6 points)
Written by: alexren
Welcome! This is a quick writeup on how I made my very own retro game console from scratch.
This is going to be a more informal document, meant to give you an idea of how everything sort of fits together & some advice I found along the way. It's not going to be comprehensive and step-by-step like hackpad
## Overview
This is a game console that uses the following:
- Retropie firmware for emulation
- GPIONext for input
- Raspberry Pi Zero 2W
- MAX98357A module
- ILI9341 320x240 display
- 8ohm 2W speaker
- 6mm tactile pushbuttons
- A 3D printed case
It's heavily based on the [Pi-Tin Project](https://github.com/jackw01/pi-tin/) by Alley Cat engineering, but dramatically simplifies the process.
^^ pic of how it looks right now!
For how to design the project, it generally goes:
## 1. Overall design
First things first - overall what did I want this thing to look like? How complicated did I want it to be?
Initially, I wanted to inclued the whole 9 yards - potentiometer for volume control, integrated USB hub, battery management, everything.
Realizing the project actually had to launch though, I settled on a barebones design that was essentially a modernized clone of the gameboy advance, with the triggers moved to the D-pad on the right instead. Much more manageable.
Ultimately, this meant I needed the following features/had the following design constraints:
- 10 buttons, Up/Down/Left/Right, Start/Select, A/B/X/Y
- Small enough to hold in hand
- I/O must be exposed so that it can be plugged into a power supply to actually play.
I opted not to deal with any battery stuff to cut down on costs & give it more of a retro feel
## 2. Electronic components
The next step was to pick out the electronic components - this actually was not easy! First, I needed to figure out what featured I needed:
- It had to actually run (needed an SBC like an rpi)
- It had to play audio (needed an audio amp)
- Needed some inputs (buttons)??
- Needed *some* sort of screen (LCD?? OLED??)
Will write more but the tl;dr is:
- Picked an RPi Zero 2W cause I had it on-hand
- Picked a MAX98375A module because theyre readily available and are well documented
- Picked 6mm buttons cause they're small & readily available
- Picked an ILI9341 because the lower resolution of the ST7735 was way too small to play anything past NES games
## 3. Firmware & software setup
Once you have the components figured out, you have to figure out how to get the software all set up!
Turns out, this was an absolutely *terrible* process to go through because there wasn't much documentation, particularly with how to get the pi to use the TFT display as the primary display
I initially tried this with an ST7735R display instead of the ILI9341, but the same instructions applied.
The tl;dr is to use the adafruit pitft install script and then change around the dtoverlay it's referencing.
## 4. Case design & physical layout
You should start with this *before* making the PCB - it's the main constraint here and the PCB can really be made as big or as small as you want.
In general, when picking passives (buttons, levers, etc), pick them last. You'll have to do a bunch of iteration back and forth between everything, and the physical layout is probably going to matter more.
When making my case, I started with the front first, since that way I can lay out the rest of the components.
The next part was figuring out how to sandwich all the pieces together.
(TO BE CONTINUED)
## 5. PCB
This is where it got interesting. For the PCB, I wanted the constraint of having the parts be easily hotswappable, since that way I could easily remove parts if needed. I also just prefer my designs to not require permanent modifications to components.
Initially, my plan was to have a single PCB for everything, similar to how sprig does it. The problem is that the buttons end up being REALLY far from the front plate because of how tall the screen is, so it'd feel really awkward.
[Adafruit's PiGRRL](https://github.com/adafruit/Adafruit-PiGRRL-PCB) project actually handled this rather elegantly by making 2 identical PCBs separately for the buttons - I opted to go with this strat because that way I could decouple the rpi carrier board from the gamepad buttons.
Ultimately, I landed with 3 different PCBs, the two sides being identical:
(picture here)
## 6. Final assembly
With all the PCBs, I just had to drop them in fusion & mount them to the case
(WIP)

View file

@ -0,0 +1,14 @@
# Guides
Welcome! This is a tab where Hack Clubbers (just like you!) can write tips n' tricks, guides, and pretty much any info on projects that they've previously built.
The goal is to have a collection of resources that grows as highway goes on.
The first one is on how to make a Game Console - check it out on the sidebar!
#### Contributing
To contribute, make a markdown file in the app/views/guides folder! Put your guide in there. Afterwards, make a PR with your changes!
**In return, you'll get rewarded 1 free point for adding *finished* a guide**

View file

@ -0,0 +1,4 @@
<div class="markdown-content font-poppins 2xl:max-w-6xl max-w-5xl md:mx-8 md:ml-16 mx-2">
<%= raw @content %>
</div>

View file

@ -90,22 +90,22 @@
<%= link_to "/getting-started/overview", class: "block" do %>
<div class="flex flex-col group border-2 border-[#5453FF] bg-[#302C61] hover:bg-[#403A88] rounded max-w-4xl justify-center text-center hover:shadow-[0_0_20px_5px_rgba(84,83,255,0.7)] transition-shadow duration-150 transition-colors hover:-rotate-1">
<div class="p-8 pb-0 space-y-4">
<p class="text-2xl font-bold md:opacity-80 group-hover:opacity-100">Starter projects - follow a guide, get your parts!</p>
<p class="font-bold opacity-60 group-hover:opacity-80"><i>For beginners, or if you're unsure of what to make.</i></p>
<p class="text-2xl font-semibold md:opacity-80 group-hover:opacity-100">Starter projects - follow a guide, get your parts!</p>
<p class="font-semibold opacity-60 group-hover:opacity-80"><i>For beginners, or if you're unsure of what to make.</i></p>
<%= image_tag "/track1.png", class: "bg-black h-96 mt-auto md:opacity-90 group-hover:opacity-100 max-w-2xl" %>
</div>
<p class="bg-[#5453FF] font-bold py-2 mt-8">START NOW →</p>
<p class="bg-[#5453FF] font-semibold py-2 mt-8">START NOW →</p>
</div>
<% end %>
<%= link_to "/getting-started/overview", class: "block" do %>
<div class="flex flex-col group border-2 border-[#5453FF] bg-[#302C61] hover:bg-[#403A88] rounded max-w-4xl justify-center text-center hover:shadow-[0_0_20px_5px_rgba(84,83,255,0.7)] transition-shadow duration-150 transition-colors hover:rotate-1">
<div class="p-8 pb-0 space-y-4">
<p class="text-2xl font-bold md:opacity-80 group-hover:opacity-100">Custom projects - get up to 350 USD*!</p>
<p class="font-bold opacity-60 group-hover:opacity-80"><i>For epic, self-guided projects.</i></p>
<p class="text-2xl font-semibold md:opacity-80 group-hover:opacity-100">Custom projects - get up to 350 USD*!</p>
<p class="font-semibold opacity-60 group-hover:opacity-80"><i>For epic, self-guided projects.</i></p>
<%= image_tag "/track2.png", class: "bg-black h-96 mt-auto md:opacity-90 group-hover:opacity-100 max-w-2xl" %>
</div>
<p class="bg-[#5453FF] font-bold py-2 mt-8">START NOW →</p>
<p class="bg-[#5453FF] font-semibold py-2 mt-8">START NOW →</p>
</div>
<% end %>
</div>
@ -167,13 +167,13 @@
<div class="grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-4 mx-24 mt-8 mx-auto">
<%= render partial: "card", locals: { title: "Eligibility", content: "Anyone 18 or below in high school is welcome! You will need to verify with ID when we send you your grant, as well as when you check in at Undercity." } %>
<%= render partial: "card", locals: { title: "Are teams allowed for Highway projects?", content: "You are free to make the hardware project with a friend! However, you both need to journal, and the grant and points will be split between you two." } %>
<%= render partial: "card", locals: { title: "Who's running this?", content: "A group of ~15 teenagers around the world! We're apart of Hack Club, a 503(c)(3) nonprofit supported by Github and many others." } %>
<%= render partial: "card", locals: { title: "Who's running this?", content: "A group of ~15 teenagers around the world! We're a part of Hack Club, a 503(c)(3) nonprofit supported by Github and many others." } %>
<div class="bg-[#544FFF] rounded p-8 max-w-xl text-md text-center transition-transform duration-200 hover:scale-102">
<p class="text-xl font-bold">I'm new to hardware, can I join?</p>
<div class="mt-4 text-md">
<p>Highway is for makers of all skill levels! We have a bunch of tutorials to follow if it's your first time - see the
<a href="/launchpad" class="underline text-pink-300 hover:decoration-wavy" target="_blank" rel="noopenner noreferrer">Starter Projects</a>
<a href="/getting-started/starter-projects" class="underline text-pink-300 hover:decoration-wavy" target="_blank" rel="noopenner noreferrer">Starter Projects</a>
section! No worries if you've never done it before.
</p>
</div>
@ -223,4 +223,4 @@
<%= image_tag "landing/landing3.png", style: "width: 100%" %>
</div>
</div>

View file

@ -20,6 +20,9 @@
<%= stylesheet_link_tag :app, "data-turbo-track": "reload" %>
<%= javascript_importmap_tags %>
<script defer data-domain="highway.hackclub.com" src="https://plausible.io/js/script.js"></script>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Knewave&family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap" rel="stylesheet">
</head>
<body>
@ -31,7 +34,7 @@
<div class="max-md:order-first col-span-full md:col-span-4 ">
<div class = "flex flex-col h-[100vh]">
<div><%= render "shared/topbar", class: "sticky top-0" %></div>
<div class = "p-2 md:p-12 mt-14">
<div class = "p-8 md:p-12 mt-14">
<%= yield %>
</div>
</div>

View file

@ -2,6 +2,7 @@
<html>
<head>
<title><%= content_for(:title) || "Highway to Undercity" %></title>
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="mobile-web-app-capable" content="yes">
@ -22,6 +23,9 @@
<%= javascript_importmap_tags %>
<script src="https://cdn.jsdelivr.net/npm/alpinejs@3.x.x/dist/cdn.min.js" defer></script>
<script defer data-domain="highway.hackclub.com" src="https://plausible.io/js/script.js"></script>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Knewave&family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap" rel="stylesheet">
</head>
<body>

View file

@ -0,0 +1,45 @@
<!DOCTYPE html>
<html>
<head>
<title><%= content_for(:title) || "Highway: Custom Projects" %></title>
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="mobile-web-app-capable" content="yes">
<%= csrf_meta_tags %>
<%= csp_meta_tag %>
<%= yield :head %>
<%# Enable PWA manifest for installable apps (make sure to enable in config/routes.rb too!) %>
<%#= tag.link rel: "manifest", href: pwa_manifest_path(format: :json) %>
<link rel="icon" href="/highwaystar.png" type="image/png">
<link rel="apple-touch-icon" href="/icon.png">
<%# Includes all stylesheet files in app/assets/stylesheets %>
<%= stylesheet_link_tag :app, "data-turbo-track": "reload" %>
<%= javascript_importmap_tags %>
<script defer data-domain="highway.hackclub.com" src="https://plausible.io/js/script.js"></script>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Knewave&family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap" rel="stylesheet">
</head>
<body>
<main class="">
<div class = "grid grid-cols-5">
<div class = "col-span-full md:col-span-1 inline md:sticky md:h-screen top-0 mt-8">
<%= render partial: "guides/sidebar" %>
</div>
<div class="max-md:order-first col-span-full md:col-span-4 ">
<div class = "flex flex-col h-[100vh]">
<div><%= render "shared/topbar", class: "sticky top-0" %></div>
<div class = "p-8 md:p-12 mt-14">
<%= yield %>
</div>
</div>
</div>
</div>
</main>
</body>
</html>

View file

@ -20,6 +20,9 @@
<%= stylesheet_link_tag :app, "data-turbo-track": "reload" %>
<%= javascript_importmap_tags %>
<script defer data-domain="highway.hackclub.com" src="https://plausible.io/js/script.js"></script>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Knewave&family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap" rel="stylesheet">
</head>
<body>

View file

@ -1,13 +1,14 @@
<div class="border-t-4 md:border-t-0 md:border-r-4 border-[#2E2A54] text-white h-full flex flex-col gap-4 justify-start mt-8 fixed">
<div class="flex flex-col justify-start p-8">
<div class="text-center grid grid-cols-1 gap-2 text-xl font-dystopian">
<%# link_to "Projects", projects_path, class: "#{current_page?(projects_path) ? 'bg-[#564CAD]' : 'hover:bg-[#564CAD]'} bg-[#2E2A54] p-2 rounded transition duration-100 block" %>
<%= link_to "Overview", overview_page_path("overview"), class: "#{current_page?(overview_page_path("overview")) ? 'bg-[#564CAD]' : 'hover:bg-[#564CAD]'} bg-[#2E2A54] p-2 px-6 rounded transition duration-100 block" %>
<%= link_to "The Point System", overview_page_path("point-system"), class: "#{current_page?(overview_page_path("point-system")) ? 'bg-[#564CAD]' : 'hover:bg-[#564CAD]'} bg-[#2E2A54] p-2 px-6 rounded transition duration-100 block" %>
<%= link_to "How to submit", overview_page_path("submit"), class: "#{current_page?(overview_page_path("submit")) ? 'bg-[#564CAD]' : 'hover:bg-[#564CAD]'} bg-[#2E2A54] p-2 px-6 rounded transition duration-100 block" %>
<%= link_to "Starter Projects", overview_page_path("starter-projects"), class: "#{current_page?(overview_page_path("starter-projects")) ? 'bg-[#564CAD]' : 'hover:bg-[#564CAD]'} bg-[#2E2A54] text-[#AFEFCB] p-2 px-6 rounded transition duration-100 block" %>
<%= link_to "Undercity", overview_page_path("undercity"), class: "#{current_page?(overview_page_path("undercity")) ? 'bg-[#564CAD]' : 'hover:bg-[#564CAD]'} bg-[#2E2A54] p-2 px-6 rounded transition duration-100 block" %>
<%= link_to "Parent's Guide", overview_page_path("parents"), class: "#{current_page?(overview_page_path("parents")) ? 'bg-[#564CAD]' : 'hover:bg-[#564CAD]'} bg-[#2E2A54] p-2 px-6 rounded transition duration-100 block" %>
<%= link_to "FAQ", overview_page_path("faq"), class: "#{current_page?(overview_page_path("faq")) ? 'bg-[#564CAD]' : 'hover:bg-[#564CAD]'} bg-[#2E2A54] p-2 px-4 rounded transition duration-100 block" %>
</div>
</div>
</div>

View file

@ -4,18 +4,28 @@ Welcome to the FAQ! This page attempts to point you to the right place when you
As always, if *anything* is unclear, ask in #highway for help!
### When is the last day to submit a project design?
July 31st, 2025.
### When is the last day to get enough points to qualify for Undercity?
July 10th, 2025
### What's the difference between hackpad and a 4-point starter project?
With hackpad, we source all the parts for you and send you a kit. With a 4-point starter, you have to find where to get all the components yourself
### When is the last day to submit a completed build to be reimbursed for undercity?
August 7th, 2025. Hard deadline.
### How can I get started with a custom project?
Read the [custom projects](/advanced) tab carefully. Everything is there.
### How are hours tracked?
For starter projects, they're not!
*For custom projects*, **you need to journal**. Please check out the [custom projects](/advanced) tab for more info on journaling!
Journaling! Every time you work on a project, you'll need to log what you did
### How will I get my 3D printed parts?
Through **printing legion**! It's an international network of Hack Clubbers 3D printing for each other, sponsored by Polymaker (website coming soon - hang tight!)
### How likely will is it that my project will be approved?
### How likely is it that my project will be approved?
It's hard to say without seeing your project, but generally speaking, as long as you follow the guidelines on the submitting page for your project then you'll more likely than not get approved:
@ -34,11 +44,11 @@ As many as you want! The funding is also *per* project, not per person.
Groups are allowed! Here's the deal though:
- Each person must journal & indicate what they did & how
- Your grant is **per project**, not per person - even if you have 10 people, you're stuck with a max of 350 USd
- Points are split evenly among all of you, no exceptions
- Each person must journal and indicate what they did and how they contributed
- Your grant is **per project**, not per person - even if you have 10 people, you're stuck with a max of 350 USD
- Points are split evenly among all of you, no exceptions.
There is no cap to the amount of people you can have on a project, however in general I *strongly* advise having less than 2 people on a project. There's a lot of diminishing returns and unclear lines of responsibility that make it difficult to actually have the project.
There is no cap to the number of people you can have on a project, however in general I *strongly* advise against having more than 2 people on a project. There's a lot of diminishing returns and unclear lines of responsibility that make it difficult to actually build the project.
### Can I submit an existing project I made?
@ -46,7 +56,7 @@ If it's already finished, unfortunately not, sorry! Start a new project
If you've just started/are in the middle of designing, you need to have journaled the entire process beforehand
If you're almost done designing, unfortunately not.
If you're almost done designing, unfortunately not
### What's the minimum complexity for a custom project?
@ -56,11 +66,12 @@ Check out the [Project Guidelines](/advanced/project-guidelines) in the Custom P
Yup! This is for everyone, irrespective of whether or not they can come to Undercity.
(you should still totally come though if you can)
(You should still totally come if you can though!)
### Can points be used for something else?
Not as of right now. For those who get *above* 12 points, we *might* have some special swag planned. No promises.
Not as of right now. There are additional rewards for those who get *above* 12 points though. Check out the [point system](/getting-started/point-system) tab for more information on that.
### What if my project costs more than $350? Can I pay for the difference myself?
Yes!

View file

@ -1,4 +1,4 @@
# Guide
# Overview
### Welcome to the **Highway** to **Undercity**, an unforgettable summer of hardware running from now through July 31st.
@ -6,8 +6,6 @@
If you've *never* done hardware before, this is *your* opportunity to get started. That one project you saw on YouTube but had no idea how to build? *That ends now.*
*If you're already a seasoned pro, this is your chance to really level up. That 5-axis 3D printer you've been thinking of? Now's your chance*.
**Earn points with each project you build.** Collect prizes along the way. Join your friends at Undercity, a 4 day hackathon in San Francisco at GitHub HQ.
*Don't forget to join the Hack Club Slack, our community. Need an invite? Enter your email on the [landing](/)!*
@ -16,62 +14,22 @@ If you've *never* done hardware before, this is *your* opportunity to get starte
---
### 1. Build hardware projects
#### 1. Pick an idea
Design custom projects. [Submit](/advanced/submitting) them. Get approved. Receive a credit card of up to $350 USD. Buy the parts and build it. Repeat
Pick an idea! You can either choose a [Starter Project](/starter-projects) (4 points) or a [Custom Project](/advanced) (6 or 10 points)
There's three tiers:
[Starter Projects](/starter-projects) are guided resources that help you build awesome stuff like macropads just like the one below. In exchange, we'll ship you the parts you need to build it!
- **Tier 3:** get 4 points, up to $50 USD
- **Tier 2:** get 6 points, up to $150 USD
- **Tier 1:** get 10 points, up to $350 USD
<img src="https://hackpad.hackclub.com/orpheuspadpic.png" style="max-width: 400px;"></img>
[Custom projects](/advanced) are fully self-directed! You'll be responsible for all the research, and in return, you'll get a debit card of up to $350* USD to spend on your project! **You must journal your progress while working on custom projects**
**by default you only get $150 USD, check out the [Custom Projects](/advanced) section to find out how you can get $350*
#### 2. Start your project
Make a repository for your project! You can use any git provider, but most people use GitHub. Now, you can start making the PCB/CAD/code/more to your project!
**If you're making a Custom project:**
In the repository, create a file called JOURNAL.md - this will be where you keep track of your progress! Every single time you work on your project, you should jot down what you did and total hours spent. *Remember to commit the changes every time you work on it!*
**Before you work on your Custom project, make a pull request to add your project URL to the [submissions.yml](https://github.com/hackclub/highway/blob/main/submissions.yml) file in the Highway GitHub repo. Your project will appear in the [Gallery](/projects)!**
It should look something like this:
```
projects:
- "https://github.com/Dongathan-Jong/SpotifyDisplay"
- "your_repo_link"
```
<br>
More instructions on the [Custom Projects](/advanced/overview) page!
Each tier has progressively harder guidelines. Check out the [Custom projects](/advanced) tab for all the info you need - including project guidelines!
#### 3. Ship the design
Shipping your design means sharing it in a way that other people can use what you made! Include the following:
Head on over to the [custom projects](/advanced) are fully self-directed! You'll be responsible for all the research, and in return, you'll get a debit card of up to $350* USD to spend on your project! *You must journal your progress while working on custom projects*
- A published design on a [GitHub](https://github.com/) repository
- A nice README.md file with a description of what your project does & any images
- Any source files that are used for your project
*You can make an unlimited amount of projects, so get building!*
(*what you need specifically will change with each project, so make sure to double check the docs so that you have everything!*)
#### 4. Collect your points & parts
Once you have a shipped project, submit it to our form here: [https://forms.hackclub.com/highway](https://forms.hackclub.com/highway)
**If you get approved** you'll get the following;
- Either a kit of parts (starter project), or a $350* credit card to build your design (custom project)!
- A 3D printed case (printed by another Hack Clubber in your country, if you don't have a 3D printer)
- A soldering kit, if you don't have one already
Approval is not guaranteed. Please go over the **submission requirements** of what you're making to make sure you don't get rejected!
Make sure to double check your design has everything you need before submitting!
If it is rejected for any reason, you'll need to wait **1 week** before you can get it re-reviewed.
**If you're a complete beginner, head on over to check out our [starter projects](/getting-started/starter-projects)! They're designed to help you get jumpstarted**
---
@ -79,8 +37,6 @@ If it is rejected for any reason, you'll need to wait **1 week** before you can
Every week, we'll host events like Speedruns, Game Nights, AMAs, and Showcases!
First one up is the **Kickoff call on Friday, May 23rd at 7:00PM EST**. Get your 1st point for free!
See the [Events](/events) tab for an up-to-date list.
---

View file

@ -0,0 +1,97 @@
# Parent's Guide to Highway to Undercity
## What is Hack Club?
**Hack Club is a registered 501(c)(3) nonprofit organization, whose mission is to foster a generation of coders, makers, builders, and founders. Hack Club's online community has a network of more than 50,000 high school students from around the world.**
Hack Club programs are free and accessible to all students. Highway to Undercity is a Hack Club program, where students are supported to create real hardware projects.
Hack Club is supported by many notable figures in the tech industry, including GitHub founder Tom Preston-werner, Dell Founder Michael Dell, as well as executives at Apple, Facebook, Microsoft, and GitHub.
#### What is Highway?
Highway is a hardware electronics program where we give out grants to teenagers to build hardware projects! From now until July 31, your child can make as many hardware projects as they want - and we'll fund up to 350 USD per project.
#### What is Undercity?
Undercity is a 4-day, in-person hardware hackathon event for high school students at GitHub HQ! Your child will get together with other teens from all over the world to try to make an electronics project in under 72 hours.
**Undercity is invite-only**; in order to recieve an invitation, your child will need to get to 12 points through Highway. You earn points through making projects!
**Here are some video documentaries of previous Hack Club events:**
- [Juice](https://www.youtube.com/watch?v=fuTlToZ1SX8): make a game, spend a week in Shanghai!
- [Scrapyard](https://www.youtube.com/watch?v=8iM1W8kXrQA&t=1s): a 24h event to build your scrappiest ideas
- [Apocalypse](https://www.youtube.com/watch?v=QvCoISXfcE8): a 44h event where you build to survive a zombie apocalypse
- [The Boreal Express](https://www.youtube.com/watch?v=hiG3fYq3xUU): a 7-day event on a train across Canada
**Hackathons are lifechanging** - it's the turning point for a lot of people to fall in love with electronics. Meeting so many people from different countries and being able to have 1-on-1, in-person conversations is really eye-opening; especially for most teenagers who have yet to see much of the world.
Undercity is a once-in-a-lifetime opportunity where your child will be able to meet very skilled teenagers from around the world, work with them to build a project together, and show off what they made to industry leaders - all in a safe and friendly enviorment. It's the largest hardware hackathon, and we will provide the proper tools and equipment (soldering station, 3d printers, hundreds of microcontrollers) for your child to use.
#### What are the costs associated?
Participation is entirely free! Meals and activities during Undercity are covered. Participants are generally responsible for their own travel to San Francisco, although we do offer travel stipends.
<img src="/hackathons.png" style="width: full" class=""></img>
## Safety
Hack Club is committed to creating a safe and comfortable environment for students at our events. During the event, a toll-free staff helpline (+1 855-625-HACK) will be available 24/7 for you to contact us if needed.
#### On security
There will be security guards 24/7 around the venue from both Hack Club and GitHub. Your child will not be able to leave the venue unless they have a freedom wavier signed. There will be curfew; nobody will be allowed in or out of the venue at the scheduled time block.
Staff will be present at all times to supervise. Everyone who enters the venue will be ID checked.
This is a safe space for all students. We aim for a gender-balanced community, and there will be gender-separated spaces for participants to sleep in at the event.
#### Participants should bring:
- ID (needs to be government issued; for check-in)
- Laptop (and charger)
- Water bottle
- Any hardware they want to use (although we will have tons provided at Undercity)
- Their hardware project from Highway to showcase it to others! (if possible)
- Clothes for 3 nights
- Toiletries - toothbrush, toothpaste, any hygiene products
- Sleeping bag
We'll send out a more detailed packing list closer to event!
#### How do I know this is legit?
Hack Club has run many events before - you can watch recaps on our [Youtube channel](https://www.youtube.com/@HackClubHQ). We have many donors that make programs like this possible. This event is supported by GitHub, who is hosting us in their headquarters for this event. Tom Preston-Werner, co-founder of GitHub, has also given us a [shoutout on Twitter](https://x.com/mojombo/status/1927596252507619426).
## Travel
When your child reaches 8 points, we will send them a Travel Form to fill out.
If you're arriving by flight, land at SFO airport.
#### Visa information
If your child is traveling internationally, they may need either an [ESTA](https://www.cbp.gov/travel/international-visitors/esta) or a visa based on their country of citizenship. Meeting the requirements to enter the United States is the responsibility of the attendee, and you are encouraged to do your own research.
If your child requires a Letter of Invitation from Hack Club, they can let us know in the Travel Form.
Visa expenses will not be paid by Hack Club under any circumstances.
#### Travel Stipends
We are giving out limited travel stipends; see the [Undercity](undercity) page for details.
Your child will be reimbursed the travel stipend amount *after* they reach 12 points and finish their projects.
Travelling by car, bus, or train? The [Hack Club Gas Fund](https://gas.hackclub.com/) can reimburse your costs! However, you'll still need an invite to come.
## Key Personnel
<img src="/keypeople.png" style="width: full" class=""></img>
#### Who can I contact for more information?
If you have any questions, please don't hesitate to email: alexren@hackclub.com
We will also have multiple Parents Calls on Zoom for more general information, a few weeks before the event.

View file

@ -1,26 +1,37 @@
# The point system
Points are the currency of Highway! Here's everything you need to know about them.
Points are the currency of Highway! Here's everything you need to know about them.
As always, if you have any questions, ask in #highway-help!
As always, if you have any questions, ask in #highway!
*This page will be updated as more questions get asked.*
**Points correlate to *complexity*, not cost.**
---
## Overview
Points are awarded when you either:
## Getting points
- Get a design **approved**
- *Note that not all submitted designs will be approved; they will get checked by a human first*
- **Starter projects**: 4 points
- **Custom projects**: 6 points by default, 10 for advanced projects.
- **Starter projects**: 2 points
- **Custom projects**: 2-5 points
- Physically build one of your projects
- **Starter projects**: 2 points
- **Custom projects**: 2-5 points
- Attend a Highway event
- Generally, 1 point
- Attending the Kickoff Call will give you 1 point!
- Sometimes 1 point (dependent on type of event)
- Check the [Events](/events) tab for more!
By default, custom projects give you **6 points**, but if its a particularly complicated project (i.e 3D printer), you can get 10 points out from it!
<img src="/swagsystem.png" style="width: 80%" class=""></img>
To get 10 points, you MUST get confirmation on your idea BEFORE working on it first. Pitch it in #highway-pitstop + get a confirmation before working on it!
<br>
## FAQ
**Can I transfer points between friends?**
no!
**Can I do the same starter project multiple times?**
no!

View file

@ -1,4 +1,4 @@
<div class="markdown-content 2xl:max-w-6xl max-w-5xl mx-16">
<div class="markdown-content 2xl:max-w-6xl max-w-5xl md:mx-8 md:ml-16 mx-2">
<%= raw @content %>
</div>

View file

@ -0,0 +1,48 @@
# Starter projects!
**Starter projects** are existing Hack Club programs that are designed to help guide you along your hardware journey!
They're called YSWSes, short for You Ship, We Ships. You ship a design, we'll ship you the parts!
**All of the parts will come straight from Hack Club HQ**, so you don't need to worry about sourcing or logistics. Just design & learn.
*Starter projects will automatically count for points once approved. Submission instructions are on their relative websites*
You can only do a starter project once, sorry!
---
## Hackpad - 4 points
**Hackpad** is a beginner YSWS that teaches you how to make your very first *macropad* from scratch! It'll help you create your own PCB, design your own 3D printed case, and setup the firmware for it from scratch.
In return, you'll get all the parts to make your macropad! This includes up to 16 switches, diodes, OLED screens, and more!
<img src="https://hackpad.hackclub.com/orpheuspadpic.png" style="max-width: 400px;"></img>
[hackpad.hackclub.com](https://hackpad.hackclub.com)
<!-- *hackpad takes on average 8-16 hours to complete.* -->
*This is the most popular running hardware YSWS, with over 400 submissions to date*
---
## Solder - 1 point
Solder is a beginner YSWS that teaches you how to make your very first PCB from scratch!
It'll walk you through the process step-by-step of setting up the software, placing down all the components, and getting it ready for fabrication!
<img src="https://solder.hackclub.com/hardware/shark.png" style="max-width: 400px;"></img>
[solder.hackclub.com](https://solder.hackclub.com)
In return, you'll get a $5 grant to buy your PCB and a kit of hardware components to play around with.
*If you're doing Solder, please follow the flow in [solder.hackclub.com](https://solder.hackclub.com) when submitting the design (ie: submit in #solder-ships). When you're finished assembling the PCB, you'll get the 1 point when you demo it!*
<!-- *solder takes on average 1-5 hours to complete* -->

View file

@ -6,25 +6,53 @@ To qualify for Undercity, you need at least 12 points and 1 *physically built*,
<img src="/guardianoftheundercity.png" style="width: full" class=""></img>
## Travel Stipends
You'll automatically qualify for a reimbursment once you have **finished building the projects you submitted for Undercity**.
The amount will be revealed at the kickoff call!
Travelling by car, bus, or train? The [Hack Club Gas Fund](https://gas.hackclub.com/) can reimburse your costs! However, you'll still need an invite to come.
## What's a hackathon?
A social making marathon! Team up with other teenagers around the world and try to make the goofiest, coolest project in 72 hours - from start to finish. At the end, you'll demo your project to others, and there will be prizes!
Throughout the hackathon, there'll be plenty of activities and workshops you can go to. Ever want to compete in a macropad speedrun or play smash with custom characters at 2am? There will be tons of things you can do here!
All meals (from dinner on Friday, to breakfast on Monday) will be provided during Undercity. You'll stay in GitHub HQ for the duration of the event - bring a sleeping bag!
**Check out some previous Hack Club flagship hackathons:**
- [Juice](https://www.youtube.com/watch?v=fuTlToZ1SX8): make a game, spend a week in Shanghai!
- [Scrapyard](https://www.youtube.com/watch?v=8iM1W8kXrQA&t=1s): a 24h hackathon to build your scrappiest ideas
- [Apocalypse](https://www.youtube.com/watch?v=QvCoISXfcE8): a 44h hackathon where you build to survive a zombie apocalypse
- [The Boreal Express](https://www.youtube.com/watch?v=hiG3fYq3xUU): a 7 day hackathon on a train across Canada
- [The Boreal Express](https://www.youtube.com/watch?v=hiG3fYq3xUU): a 7-day hackathon on a train across Canada
<img src="/hackathons.png" style="width: full" class=""></img>
## Travel
Undercity opening ceremony will start around 7pm on Friday. Plan to arrive a few hours before - check-in will start in the afternoon! It'll end Monday at noon.
Once you reach 8 points, we'll send you the Travel Form to fill out!
#### Visa information
If youre traveling internationally, you may need either an [ESTA](https://www.cbp.gov/travel/international-visitors/esta) or a visa based on your country of citizenship. Meeting the requirements to enter the United States is the responsibility of the attendee, and you are encouraged to do your own research.
If you require a visa:
- Start applying soon; wait times can get very long
- If you need a Letter of Invitation from Hack Club, let us know in the Travel form
Visa expenses will not be paid by Hack Club under any circumstances.
#### Travel Stipends
You'll qualify for a reimbursment once you have **finished building the projects you submitted for Undercity + reached 12 points**.
Base stipends:
- If you're in North America, we will reimburse you 200 USD
- If you're international, we will reimburse you 500 USD
You can also earn additional stipends for points above 12.
A needs-based stipend application will also be available.
Travelling by car, bus, or train? The [Hack Club Gas Fund](https://gas.hackclub.com/) can reimburse your costs! However, you'll still need an invite to come.
<br>
<img src="/undercitygate.png" style="width: full" class=""></img>

View file

@ -5,6 +5,7 @@
<% if @projects.any? %>
<div class="flex flex-col justify-center text-center">
<p class="opacity-70">Check out what others are building!</p>
<p class="opacity-70">Highlighted projects with blue borders are handpicked cool projects with good journals.</p>
<p class="opacity-70"><i><%= pluralize(@projects.count, "project") %> <%= @projects.count == 1 ? "has" : "have" %> been started:</i></p>
</div>
<% else %>
@ -17,7 +18,7 @@
<div class="grid xl:grid-cols-3 gap-4 mt-4 md:grid-cols-2 grid-cols-1">
<% @projects.each do |project| %>
<div class="bg-[#2E2A54] border-2 border-[#403A88] hover:border-[#544FFF] rounded-lg text-white hover:bg-[#3A3A6D] transition duration-100 transition-transform hover:scale-102 p-8 h-full flex flex-col">
<div class="bg-[#2E2A54] border-2 <%= project.is_highlighted? ? "border-blue-600 shadow-[0_0_20px_5px_rgba(84,83,255,0.7)]" : "border-[#403A88]" %> hover:border-[#544FFF] rounded-lg text-white hover:bg-[#3A3A6D] transition duration-100 transition-transform hover:scale-102 p-8 h-full flex flex-col">
<% if project.has_journal? %>
<%= link_to project_path(user: project.user, project_name: project.project_name), class: "block mb-2" do %>
<h1 class="text-2xl font-bold"><%= project.name.truncate(25) %></h1>

View file

@ -25,8 +25,8 @@
<!-- desktop -->
<div class="hidden md:flex items-center space-x-6 my-4 ml-8 *:font-dystopian *:uppercase *:hover:underline 2xl:text-2xl text-xl text-center text-[#AFBDEF]">
<%= link_to "Getting started", "/getting-started", class: "#{request.path.start_with?('/getting-started') ? 'glow' : ''}" %>
<%= link_to "Starter projects", "/starter-projects", class: "text-[#D1AFEF] #{current_page?('/starter-projects') ? 'glow' : ''}" %>
<%= link_to "Custom projects", "/advanced", class: "text-[#AFEFCB] #{request.path.start_with?('/advanced') ? 'glow' : ''}" %>
<%= link_to "Guides", "/guides", class: "text-[#D1AFEF] #{request.path.start_with?('/guides') ? 'glow' : ''}" %>
<%= link_to "Gallery", projects_path, class: "#{current_page?(projects_path) ? 'glow' : ''}" %>
<%= link_to "Events", events_path, class: "#{current_page?(events_path) ? 'glow' : ''}" %>
<%= link_to "Faq", "/getting-started/faq", class: "#{current_page?('/getting-started/faq') ? 'glow' : ''}" %>
@ -50,7 +50,8 @@
>
<%= link_to "Getting started", "/getting-started" %>
<%= link_to "Starter projects", "/starter-projects" %>
<%= link_to "Resources", root_path %>
<%= link_to "Custom projects", "/advanced" %>
<%= link_to "Gallery", projects_path %>
<%= link_to "Events", events_path %>
<%= link_to "Faq", "/getting-started/faq" %>
</div>

View file

@ -0,0 +1,3 @@
- hackclub/awesome-project
- AGB556/hydra
- programmerturtle/donotdelta

View file

@ -59,5 +59,8 @@ Rails.application.routes.draw do
get "/advanced/:page", to: "advanced#show", as: "advanced_page"
get "/advanced/", to: redirect("/advanced/overview")
get "/guides/:page", to: "guides#show", as: "guides_page"
get "/guides/", to: redirect("/guides/overview")
get "/events", to: "events#index"
end

View file

@ -9,6 +9,8 @@ created_at: "2024-03-20"
Highway is a framework designed to make web development more accessible and enjoyable. Built with modern best practices in mind, it provides a streamlined development experience while maintaining flexibility and power.
![](./logo2.png)
## Key Features
- **Modern Architecture**: Built on top of Rails 8, leveraging the latest web technologies

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

BIN
public/eventkickoff2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3 MiB

BIN
public/hackathons.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 MiB

BIN
public/keypeople.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

1
public/projects Symbolic link
View file

@ -0,0 +1 @@
../content/projects

BIN
public/strangeparts.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 MiB

BIN
public/strangeparts2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 MiB

BIN
public/swagsystem.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

View file

@ -1,27 +1,53 @@
projects:
- "https://github.com/meepodeep/OrangePiDeck"
- "https://github.com/MithilSaiReddy/bujji_2025"
- "https://github.com/atomisadev/cubert"
- "https://github.com/Hasnat4763/Bluetooth-Adapter"
- "https://github.com/Synaptic-Odyssey/Gimbal-Pen"
- "https://github.com/smartlinuxcoder/calculettissimo"
- "https://github.com/Overlord-Runt/ESP32-Dev-Board"
- "https://github.com/Marc-Blanco/Keyboardcontroller"
- "https://github.com/pizzalover125/thing"
- "https://github.com/zaid45645/zoltron-v1"
- "https://github.com/xsollwa/remote-assist-hand"
- "https://github.com/CodewMilan/byteboard"
- "https://github.com/dave9123/lenie"
- "https://github.com/souptik-samanta/WalkieTalkie"
- "https://github.com/cube-king/fastfoodfinder"
- "https://github.com/lsyzg/NeoPod"
- "https://github.com/Navdeep-Codes/Cadey"
- "https://github.com/Shebbel/Multi_macropad"
- "https://github.com/Choccy-vr/WavePad"
- "https://github.com/meepodeep/ErgoDecks"
- "https://github.com/Overlord-Runt/Alarm-Clock"
- "https://github.com/meepodeep/ModuDeck"
- "https://github.com/espcaa/prism"
- "https://github.com/devramsean0/Nixie-Pendant"
- "https://github.com/ponderslime/pip-boy"
- "https://github.com/im-udxt/ModularMacro"
- "https://github.com/awesomebrownies/cyberdeck"
- "https://github.com/Dongathan-Jong/SpotifyDisplay"
- "https://github.com/tacocatCLAUS/f1-laptop"
- "https://github.com/Bluelightning26/BluBoard"
- "https://github.com/Greninja44/Mechakey_k48"
- "https://github.com/lucas11222/Lucas11-Dev-Board"
- "https://github.com/cheyao/slate"
- "https://github.com/Zylve/cuber"
- "https://github.com/Ventengo1/ServoRocket"
- "https://github.com/Horizon-Avionics/Horizon-Avionics-Hardware"
- "https://github.com/scooterthedev/haptic-keyboard"
- "https://github.com/scooterthedev/usbc-reader"
- "https://github.com/eddyzow/cold-brew-express"
- "https://github.com/TheEternalComrade/The-Prince-Keeb"
- "https://github.com/Broodierlake140/Nerf-car"
- "https://github.com/devramsean0/eink-watch"
- "https://github.com/cookiemonsternz/lensboard"
- "https://github.com/Overlord-Runt/rc-sentry"
- "https://github.com/Overlord-Runt/rc-car-with-a-arm"
- "https://github.com/pizzalover125/cyberdeck"
- "https://github.com/QinCai-rui/PicoCube"
- "https://github.com/QinCai-rui/RasPiCube"
- "https://github.com/Cyclic007/miniMagicMacroMachene"
- "https://github.com/ImNoahDev/Voice-Assistant"
- "https://github.com/AchtEnthusiast/Tepew-I-Rev-A"
- "https://github.com/AGB556/Hydra"
- "https://github.com/pizzalover125/cardpad"
- "https://github.com/cheyao/esp-usb"
- "https://github.com/PythonAtSea/NeoPWM"
- "https://github.com/Aahil78/LED_Memory_Game_Nano/"
@ -42,7 +68,9 @@ projects:
- "https://github.com/picafe/bicolor-alarm-clock"
- "https://github.com/realgoodguyalways/Mouse-alternative"
- "https://github.com/danieliscrazy/BadgeOfDoom"
- "https://github.com/danieliscrazy/jukebox"
- "https://github.com/CodeOS99/zebrex"
- "https://github.com/CodeOS99/SwiftPulse"
- "https://github.com/mannireis/splitly"
- "https://github.com/ImNoahDev/In13-Spectrum-Analyser"
- "https://github.com/Stupid-Creations/E-ink-thingy"
@ -61,16 +89,198 @@ projects:
- "https://github.com/KaushikTadepalli/Antweight_Robot"
- "https://github.com/ProgrammerTurtle/DoNotDelta"
- "https://github.com/GuyOnWifi/KeyboardBluetoothAdapter"
- "https://github.com/pizzalover125/ESP32-Devboard"
- "https://github.com/wenbang24/idiot12-wireless"
- "https://github.com/Daprinternerd/Project-Ghost"
- "https://github.com/Dodge100/Reborn3"
- "https://github.com/KOEGlike/meko-pcb"
- "https://github.com/TheEternalComrade/The-Joy-Reader"
- "https://github.com/ImNoahDev/MacPad-Keyboard"
- "https://github.com/LucasHT22/ElectronicDrumKit"
- "https://github.com/LucasHT22/ChessClock"
- "https://github.com/Andrew-Arcade/log"
- "https://github.com/Andrew-Arcade/Andrew-Arcade"
- "https://github.com/TheEternalComrade/The-Fume-Be-Gone"
- "https://github.com/NimitVijayvargee/keyboardv2"
- "https://github.com/artemis9703/tv-remote-dl44-blaster"
- "https://github.com/Neya-M/Claw-Machine"
- "https://github.com/TailsFanLOL/LungClean"
- "https://github.com/gamemake-eng/Weu"
- "https://github.com/milanmish/grubCompass"
- "https://github.com/LimesKey/PartyBomb"
- "https://github.com/vkunamneni1/MiRPi"
- "https://github.com/shiva233/HackCharm"
- "https://github.com/KavEn06/Wireless-Trivia-Buzzers"
- "https://github.com/FDragon07/centauri-keyboard"
- "https://github.com/WheeledCord/T430-Ultrabay-Companion-Core"
- "https://github.com/aargar1/argonaut"
- "https://github.com/ksgat/combat-robot"
- "https://github.com/isobel-p/shortcut"
- "https://github.com/JMatuszczakk/CalculatorWithGPT"
- "https://github.com/justdanielndev/hello-i-am-oss"
- "https://github.com/cheyao/stmounter"
- "https://github.com/wormmeatapple/Single-PCR"
- "https://github.com/Mikuel210/Starkit"
- "https://github.com/yoavmlotok/devil-board"
- "https://github.com/wormmeatapple/Warper"
- "https://github.com/DHmango/Keyboard-With-Utility"
- "https://github.com/kostasrockets/kickstartmyheart"
- "https://github.com/Dodge100/Dodge80"
- "https://github.com/TheScientist101/astra"
- "https://github.com/carrotsoups/keyboard"
- "https://github.com/ramondeleonca/brushless-balance-bot"
- "https://github.com/toby-alpha/6-axis-arm"
- "https://github.com/arp2019-Dev/ARPIGlasses"
- "https://github.com/sheldonmac/highway-pin"
- "https://github.com/Pegoku/LED-Controller-PCB"
- "https://github.com/wormmeatapple/Single-PCR"
- "https://github.com/Mikuel210/Starkit"
- "https://github.com/yoavmlotok/devil-board"
- "https://github.com/Pnbcris/ModuMic"
- "https://github.com/hackclub-ethan/fitness-tracker"
- "https://github.com/champsheard/Velocis"
- "https://github.com/ShibamRoy9826/thunder"
- "https://github.com/imsaycat/LoRa-comms"
- "https://github.com/Mr-milky-way/G.A.B.E.-Filght-Computer"
- "https://github.com/thelegendofmario/graphite"
- "https://github.com/pizzalover125/hackboard"
- "https://github.com/Beenana02/Krill-Kam"
- "https://github.com/Toyotra/HEXABOSS"
- "https://github.com/scattercat-123/Astra-the-AI-Dog"
- "https://github.com/bigbainc/macropad"
- "https://github.com/regular030/Keyboard-Saturn"
- "https://github.com/snippyrow/-816-board"
- "https://github.com/HonkaDonka/Launchpad"
- "https://github.com/DragonRoyal/Imperium"
- "https://github.com/alx-alexpark/VVVF"
- "https://github.com/BitBot-Automation/BitPhoton"
- "https://github.com/KnowScratcher/QuakeCord"
- "https://github.com/DylM0nster22/1lb-vertical-spinner"
- "https://github.com/Keyaan-07/USB-PD-Power-Supply"
- "https://github.com/Spaceman113138/CADkeyboard"
- "https://github.com/AVSCGREAT/TheZero"
- "https://github.com/SbRhubarbPie/PieBoard"
- "https://github.com/SquirrelEnjoyer23/MushroomLampV1"
- "https://github.com/AnkushRoy-code/SplitWave"
- "https://github.com/Sahil321-Coder/AI-Desktop-Assistant"
- "https://github.com/Prilex1/HAB-OBC"
- "https://github.com/Fastestkyo/5-axis-printer"
- "https://github.com/roc-ket-cod-er/CustomDevBoard"
- "https://github.com/justdanielndev/f-auto"
- "https://github.com/waaaaaaaaah/Sparrow-TVC-Hopper"
- "https://github.com/SharKingStudios/MinnowBot"
- "https://github.com/JoelBiswas/r2d2"
- "https://github.com/2Mon/battlebot"
- "https://github.com/StocksOnlyGoUp/Auto-Leveling-Car-Hack-Club"
- "https://github.com/ducky786/Hackclub-MacroPad"
- "https://github.com/DynamicWhiteHat/RCRocket"
- "https://github.com/information-fiend/rabbitboard"
- "https://github.com/ConfusedHello/DLSR-Gimbal"
- "https://github.com/Hex-4/glyph"
- "https://github.com/broiisapro/SimRobot"
- "https://github.com/TheEternalComrade/The-Scheme-Machine"
- "https://github.com/Meowkewok/FlyWheel"
- "https://github.com/benPark20/Conference-Badge-Topper"
- "https://github.com/commonkestrel/fateful-hardware"
- "https://github.com/Kuberwastaken/ATHENA"
- "https://github.com/amino47/CybeRPI"
- "https://github.com/OndrejVacekSPSCL/RP0-HandHeld"
- "https://github.com/K73T-T/Vanta-MK.I"
- "https://github.com/Kecreeper/nRFBell"
- "https://github.com/realgoodguyalways/Electromagnetic-Door-Unlocker"
- "https://github.com/Cyclic007/ConvolutiedController"
- "https://github.com/lordbagel42/turing-split-keyboard"
- "https://github.com/adhyys07/Motion-FPV-Drone"
- "https://github.com/reverseFlash102/HoloDisplay"
- "https://github.com/BackwardsMonday/LpTankThermalSensor"
- "https://github.com/invictus-anic3tus/v4"
- "https://github.com/TheUnicycling1/D-D-health-counter"
- "https://github.com/120974/Lightsaber-"
- "https://github.com/HelloItsAPerson/Coinsight-mini---HighwaytoUndercity"
- "https://github.com/ayushj-18/petfeeder"
- "https://github.com/python35/IINTS"
- "https://github.com/foglomon/fogpad"
- "https://github.com/rivques/the-matrix"
- "https://github.com/syvrc/syvrcboard-v0"
- "https://github.com/eddyzow/Easy75"
- "https://github.com/toby-alpha/beach-rescue-drone"
- "https://github.com/samatua1221-2896/Arm-Assistant"
- "https://github.com/kushmdesai/Gamepad"
- "https://github.com/GearBoxFox/highway-qrp-sdr"
- "https://github.com/Arrow-07/NexoBT"
- "https://github.com/bernininini/bean-cake"
- "https://github.com/jedim101/arm"
- "https://github.com/daamin909/threedeeprinter"
- "https://github.com/Sahil321-coder-code/RasBuddy"
- "https://github.com/raykush99/VibePad"
- "https://github.com/raykush99/OctupusArms"
- "https://github.com/RyanBran888/Yugioh-duel-disk"
- "https://github.com/PianoMan0/Forte"
- "https://github.com/possiblyselena/borealexpressmodel"
- "https://github.com/dfedor2008/Topaz"
- "https://github.com/Loewe111/fadergrid"
- "https://github.com/allenftc/highway-helper"
- "https://github.com/Cheezer1656/Smartwatch"
- "https://github.com/felixwittwer/homeassistant_automaic_greenhouse"
- "https://github.com/Outdatedcandy92/PicoDucky"
- "https://github.com/runthebot/notAHackPad"
- "https://github.com/capitaoananas/40ish-splitkeyboard-v2"
- "https://github.com/Hash-AK/PiRPKey"
- "https://github.com/RyanBran888/yugioh-dueling-board"
- "https://github.com/MaxedPC08/SmartHomeAssistant"
- "https://github.com/Divyansh6/Electric-Piano"
- "https://github.com/Divyansh6/Pod-of-All-Trades"
- "https://github.com/kashsuks/Securodoor"
- "https://github.com/Simonhajd/Sticktility"
- "https://github.com/CodrOfTheFuture/Omega_Keyboard"
- "https://github.com/The-UnknownHacker/FSD-Car"
- "https://github.com/atharva-malik/ChaosPad-Macropad"
- "https://github.com/lopa-ok/Go-kart"
- "https://github.com/knivier/AutonNav/"
- "https://github.com/Maxwell-L-hack/THE-Hacker-badge"
- "https://github.com/RyanBran888/robot-friends"
- "https://github.com/KnowScratcher/MagFire"
- "https://github.com/froppii/gitar"
- "https://github.com/BigBrain244466666/BalanceBot"
- "https://github.com/arghunter/Acoustic-Camera"
- "https://github.com/AIIan-Li/allanpad"
- "https://github.com/kushmdesai/Ulti-Board"
- "https://github.com/maverickkamal/StudyStreak"
- "https://github.com/josh-lambda/fencing-tester"
- "https://github.com/wunused-hc/Magic-Chessboard"
- "https://github.com/Max-Worboys/midi-controller"
- "https://github.com/wenbang24/spotify-turntable"
- "https://github.com/CyrilSLi/owsi"
- "https://github.com/Fastestkyo/gokart"
- "https://github.com/hjw1112/customboard"
- "https://github.com/DinosaurPotato534/scuffedMP3"
- "https://github.com/twentysicks/krishak"
- "https://github.com/DominicTYLau/BattleBots"
- "https://github.com/lolasanchezz/flipclock"
- "https://github.com/CedricL1u/BilletAluminumKeyboard"
- "https://github.com/vibsthebot/grasshopper"
- "https://github.com/ANSHUMANDOCX/Desk-Display"
- "https://github.com/Yoda-Flash/midi-beatpad"
- "https://github.com/ItzJashoo/jintendoslab"
- "https://github.com/boykisserchan/SOSStick"
- "https://github.com/boykisserchan/TouchBracelet"
- "https://github.com/Fabio53443/air-canary"
- "https://github.com/KilometersMiles/3dPrintedDrone"
- "https://github.com/9Akshit1/Fourth-Wall"
- "https://github.com/peterxn123/super-badge"
- "https://github.com/rishabhreng/hackpad"
- "https://github.com/AGB556/The-Nest"
- "https://github.com/falsonix/DIY-Rudder-Pedals"
- "https://github.com/akshatk-khurana/K2-Mini-Macropad"
- "https://github.com/ANSHUMANDOCX/Macropad_V2"
- "https://github.com/luteron6/fourty."
- "https://github.com/thorthefish/Small-croxy"
- "https://github.com/Keyaan-07/Hawt-Plate"
- "https://github.com/m5kro/KiKard"
- "https://github.com/regular030/SaturnArm"
- "https://github.com/HackMon24/NaviBot"
- "https://github.com/justdanielndev/pixel-frame"
- "https://github.com/cheyao/inkbadge"
- "https://github.com/notreallyabird/Multiterrain-Vehicle"
- "https://github.com/javaarchive/rhythm-game-things"
- "https://github.com/Flaryiest/65-Keyboard"
- "https://github.com/zarahmg/highway-25---zg"
- "https://github.com/akshatk-khurana/Zetaboard"

View file

@ -0,0 +1,7 @@
require "test_helper"
class GuidesControllerTest < ActionDispatch::IntegrationTest
# test "the truth" do
# assert true
# end
end