mirror of
https://github.com/System-End/highway.git
synced 2026-04-19 23:22:53 +00:00
fixed merge conflict
This commit is contained in:
commit
60ba6ce4c2
23 changed files with 282 additions and 68 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
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
|
||||
|
|
|
|||
|
|
@ -6,15 +6,15 @@ Whatever that one project you've been thinking of doing forever - whether that b
|
|||
|
||||
You can choose from one of the following tiers:
|
||||
|
||||
- A 4 point project with up to $50 USD in funding
|
||||
- A 6 point project with up to $150 USD in funding
|
||||
- A 10 point project with up to $350 USD in funding
|
||||
- 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? Ask in the #highway channel in slack!
|
||||
Any questions? Ask in the [#highway](https://hackclub.slack.com/archives/C08Q1H6D79B) channel in slack!
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -33,7 +33,6 @@ Create a repository for your project! Most people use GitHub, but you can use an
|
|||
|
||||
Next, start a journal by creating a JOURNAL.md file in your repo. At the very top, include the following data:
|
||||
|
||||
|
||||
```
|
||||
---
|
||||
title: "Your Project Name"
|
||||
|
|
@ -42,7 +41,8 @@ description: "Describe your project in a short sentence!"
|
|||
created_at: "2024-03-20"
|
||||
---
|
||||
```
|
||||
Journaling is mandatory for custom projects
|
||||
<br>
|
||||
Journaling is mandatory for custom projects.
|
||||
|
||||
#### 3. Make a PR to add it to the gallery
|
||||
|
||||
|
|
@ -53,7 +53,7 @@ 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!
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -34,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>
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
<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 "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>
|
||||
|
||||
|
|
|
|||
|
|
@ -32,8 +32,6 @@ Design & build hardware projects. You can either build fully [Custom Projecs](/a
|
|||
|
||||
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.
|
||||
|
||||
---
|
||||
|
|
|
|||
82
app/views/overview/parents.md
Normal file
82
app/views/overview/parents.md
Normal file
|
|
@ -0,0 +1,82 @@
|
|||
# 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 grant 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 electronics 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
|
||||
|
||||
#### 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.
|
||||
|
||||
## 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.
|
||||
|
||||
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
|
||||
|
||||
## Travel
|
||||
|
||||
When your child reaches 8 points, we will send them a Travel Form to fill out.
|
||||
|
||||
#### 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, a few weeks before the event, for more general information.
|
||||
|
|
@ -6,25 +6,51 @@ 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
|
||||
|
||||
## 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>
|
||||
|
|
|
|||
|
|
@ -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
3
config/highlighted_projects.yml
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
- hackclub/awesome-project
|
||||
- AGB556/hydra
|
||||
- programmerturtle/donotdelta
|
||||
|
|
@ -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
BIN
content/projects/hackclub/awesome-project/logo2.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 39 KiB |
BIN
public/eventkickoff2.png
Normal file
BIN
public/eventkickoff2.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3 MiB |
BIN
public/keypeople.png
Normal file
BIN
public/keypeople.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.4 MiB |
1
public/projects
Symbolic link
1
public/projects
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../content/projects
|
||||
BIN
public/strangeparts.png
Normal file
BIN
public/strangeparts.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.1 MiB |
BIN
public/strangeparts2.png
Normal file
BIN
public/strangeparts2.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.9 MiB |
|
|
@ -100,7 +100,7 @@ projects:
|
|||
- "https://github.com/WheeledCord/T430-Ultrabay-Companion-Core"
|
||||
- "https://github.com/aargar1/argonaut"
|
||||
- "https://github.com/ksgat/combat-robot"
|
||||
- "https://github.com/isobel-p/light-bar"
|
||||
- "https://github.com/isobel-p/shortcut"
|
||||
- "https://github.com/JMatuszczakk/CalculatorWithGPT"
|
||||
- "https://github.com/justdanielndev/hello-i-am-oss"
|
||||
- "https://github.com/cheyao/stmounter"
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue