Merge branch 'main' into main
9
.github/workflows/ci.yml
vendored
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -10,3 +10,7 @@
|
|||
*/
|
||||
|
||||
@import "landing";
|
||||
|
||||
body {
|
||||
font-family: "Poppins", sans-serif;
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@
|
|||
|
||||
@theme {
|
||||
--font-dystopian: "Dystopian", sans-serif;
|
||||
--font-poppins: "Poppins", sans-serif;
|
||||
}
|
||||
|
||||
.glow {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
2
app/controllers/guides_controller.rb
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
class GuidesController < MarkdownController
|
||||
end
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
2
app/helpers/guides_helper.rb
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
module GuidesHelper
|
||||
end
|
||||
|
|
@ -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
|
||||
|
|
|
|||
51
app/models/concerns/has_frontmatter.rb
Normal 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
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
||||
|
|
|
|||
|
|
@ -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!
|
||||
32
app/views/advanced/ideas.md
Normal 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
|
||||
|
||||
1
app/views/advanced/journaling.md
Normal file
|
|
@ -0,0 +1 @@
|
|||
asdf
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 -->
|
||||
|
|
|
|||
|
|
@ -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:**
|
||||
|
|
|
|||
46
app/views/advanced/resources.md
Normal 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
|
||||
48
app/views/advanced/shipping.md
Normal 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 it’ll be very, *very* difficult to remember anything about it\! *It’s 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, it’s 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) (I’ll 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 it’s hard for other people to recognize your work, nor does it make it easy to learn from. *It’s 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 there’s any questions let me know.
|
||||
|
|
@ -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>
|
||||
|
||||
|
|
|
|||
|
|
@ -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!
|
||||
13
app/views/advanced/tips.md
Normal 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
|
||||
24
app/views/advanced/troubleshooting.md
Normal 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:
|
||||
|
||||
|
||||
|
|
@ -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>
|
||||
|
||||
|
||||
|
|
|
|||
17
app/views/guides/_sidebar.html.erb
Normal 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>
|
||||
|
||||
|
||||
|
||||
103
app/views/guides/game-console.md
Normal 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)
|
||||
|
||||
14
app/views/guides/overview.md
Normal 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**
|
||||
|
||||
4
app/views/guides/show.html.erb
Normal 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>
|
||||
|
||||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
45
app/views/layouts/guides.html.erb
Normal 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>
|
||||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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!
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
||||
---
|
||||
|
|
|
|||
97
app/views/overview/parents.md
Normal 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.
|
||||
|
|
@ -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!
|
||||
|
|
@ -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>
|
||||
|
||||
|
|
|
|||
48
app/views/overview/starter-projects.md
Normal 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* -->
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -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 you’re 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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
3
config/highlighted_projects.yml
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
- hackclub/awesome-project
|
||||
- AGB556/hydra
|
||||
- programmerturtle/donotdelta
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
||||

|
||||
|
||||
## Key Features
|
||||
|
||||
- **Modern Architecture**: Built on top of Rails 8, leveraging the latest web technologies
|
||||
|
|
|
|||
BIN
content/projects/hackclub/awesome-project/logo2.png
Normal file
|
After Width: | Height: | Size: 39 KiB |
BIN
public/eventkickoff2.png
Normal file
|
After Width: | Height: | Size: 3 MiB |
BIN
public/hackathons.png
Normal file
|
After Width: | Height: | Size: 2.1 MiB |
BIN
public/keypeople.png
Normal file
|
After Width: | Height: | Size: 1.4 MiB |
1
public/projects
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../content/projects
|
||||
BIN
public/strangeparts.png
Normal file
|
After Width: | Height: | Size: 3.1 MiB |
BIN
public/strangeparts2.png
Normal file
|
After Width: | Height: | Size: 2.9 MiB |
BIN
public/swagsystem.png
Normal file
|
After Width: | Height: | Size: 1.7 MiB |
222
submissions.yml
|
|
@ -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"
|
||||
|
|
|
|||
7
test/controllers/guides_controller_test.rb
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
require "test_helper"
|
||||
|
||||
class GuidesControllerTest < ActionDispatch::IntegrationTest
|
||||
# test "the truth" do
|
||||
# assert true
|
||||
# end
|
||||
end
|
||||