fixed merge conflict

This commit is contained in:
Alex Ren 2025-05-27 22:24:35 -04:00
commit 60ba6ce4c2
23 changed files with 282 additions and 68 deletions

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -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!

View file

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

View file

@ -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>

View file

@ -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>

View file

@ -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.
---

View 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.

View file

@ -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 youre traveling internationally, you may need either an [ESTA](https://www.cbp.gov/travel/international-visitors/esta) or a visa based on your country of citizenship. Meeting the requirements to enter the United States is the responsibility of the attendee, and you are encouraged to do your own research.
If you require a visa:
- Start applying soon; wait times can get very long
- If you need a Letter of Invitation from Hack Club, let us know in the Travel form
Visa expenses will not be paid by Hack Club under any circumstances.
#### Travel Stipends
You'll qualify for a reimbursment once you have **finished building the projects you submitted for Undercity + reached 12 points**.
Base stipends:
- If you're in North America, we will reimburse you 200 USD
- If you're international, we will reimburse you 500 USD
You can also earn additional stipends for points above 12.
A needs-based stipend application will also be available.
Travelling by car, bus, or train? The [Hack Club Gas Fund](https://gas.hackclub.com/) can reimburse your costs! However, you'll still need an invite to come.
<br>
<img src="/undercitygate.png" style="width: full" class=""></img>

View file

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

View file

@ -50,7 +50,8 @@
>
<%= link_to "Getting started", "/getting-started" %>
<%= link_to "Starter projects", "/starter-projects" %>
<%= link_to "Resources", root_path %>
<%= link_to "Custom projects", "/advanced" %>
<%= link_to "Gallery", projects_path %>
<%= link_to "Events", events_path %>
<%= link_to "Faq", "/getting-started/faq" %>
</div>

View file

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

View file

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

BIN
public/eventkickoff2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3 MiB

BIN
public/keypeople.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

1
public/projects Symbolic link
View file

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

BIN
public/strangeparts.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 MiB

BIN
public/strangeparts2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 MiB

View file

@ -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"