Merge branch 'main' into dependabot/npm_and_yarn/octokit/core-6.1.2

This commit is contained in:
graham 2024-04-30 19:29:17 -04:00 committed by GitHub
commit 5d3612a1b9
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
15 changed files with 312 additions and 31 deletions

View file

@ -40,7 +40,6 @@ export default function RsvpForm() {
<Input
{...useField('address_line_1')}
placeholder="1 Hacker Way"
required
sx={{ border: '1px solid', borderColor: 'muted' }}
/>
</Label>
@ -49,7 +48,6 @@ export default function RsvpForm() {
<Input
{...useField('address_zip')}
placeholder="01337"
required
sx={{ border: '1px solid', borderColor: 'muted' }}
/>
</Label>

View file

@ -0,0 +1,103 @@
import CardModel from './card-model'
import { Box, Flex, Grid, Image, Text } from 'theme-ui'
import Buttons from './button'
/** @jsxImportSource theme-ui */
export default function Apocalypse() {
return (
<CardModel
color="white"
sx={{
backgroundSize: 'cover',
backgroundColor: '#95C9E5'
}}
position={[null, 'bottom', 'bottom']}
image="https://cloud-1132qsbcy-hack-club-bot.vercel.app/0image__6_.png"
>
<Grid columns={[1, 1, 2]} sx={{ position: 'relative', zIndex: 2 }}>
<Flex
sx={{
flexDirection: 'column',
justifyContent: 'space-between'
}}
>
<Image
src="https://cloud-lvxa0tab7-hack-club-bot.vercel.app/0apotitle_cropped.png"
sx={{
width: ['200px', '250px', '300px'],
mt: ['-5px', '-5px', '-5px'],
mb: ['30px', '30px', '30px'],
position: 'relative',
zIndex: 2,
fontSize: ['36px', 4, 5],
color: 'white'
}}
alt="Apocalypse"
/>
<Flex
sx={{
flexDirection: ['row', 'row', 'column'],
justifyContent: 'space-between'
}}
>
<Text
as="p"
variant="subheadline"
sx={{
ml: ['0px', '0px', '10px'],
mt: ['0px', '0px', '-10px'],
mb: ['0px', '0px', '20px'],
zIndex: 2,
color: 'white',
fontSize: ['24px !important'],
textShadow: '0 0 20px #fbbae4'
}}
>
Downtown Toronto
<br />
May 1719
</Text>
<Buttons
icon="flag-fill"
href="https://apocalypse.hackclub.com/"
target="_blank"
rel="noopener"
primary="#FE5CA8"
id="43"
sx={{ color: '#fff' }}
>
Join Us
</Buttons>
</Flex>
</Flex>
<Box>
<Text
as="p"
variant="subtitle"
sx={{
fontSize: ['22px', '20px', '18px']
}}
>
It's 2034, and zombies have taken over! But tech still operates.
What would you do?
</Text>
<Text
as="p"
variant="subtitle"
sx={{
fontSize: ['22px', '20px', '18px']
}}
>
Join 150 high schoolers for 44 hours at Apocalypse! Take yourself
out of the real world and build wacky projects to spark a new age of
humanity.
</Text>
</Box>
</Grid>
</CardModel>
)
}

View file

@ -91,10 +91,10 @@ export default function Slack({ data, slackKey, events }) {
variant="subtitle"
sx={{ fontSize: [1, '16px', '24px'] }}
>
Coding doesnt have to be a solitary activity. At Hack&nbsp;Club, we
make things together and in our Slack, youll find awesome people to
hangout with too. Code together, find your programming community, or
just hang out.
Coding doesnt have to be a solitary activity. At Hack&nbsp;Club,
we make remarkable things together, and in our Slack youll find
awesome people to hang out with too. Code together, find your programming
community, dream up something wild, or just #lounge.
</Text>
<Text as="p" variant="subtitle">
Occasionally we invite someone we really want to speak to (like Sal

View file

@ -2,7 +2,7 @@ const projects = [
{
title: 'Brainwave device for thought-based computer interaction.',
description:
'The team of teens behind BCI is building both the hardware and software for a brainwave reading device to interact with computers using thoughts',
'The team of teens behind Monolith BCI is building both the hardware and software for a brainwave reading device to interact with computers using thoughts',
img: 'bci',
color: ['#ec3750', '#F58695'],
itemId: 0

View file

@ -12,7 +12,7 @@
"format": "prettier --write ."
},
"dependencies": {
"@apollo/client": "^3.9.9",
"@apollo/client": "^3.9.11",
"@emotion/react": "^11.11.4",
"@emotion/styled": "^11.11.5",
"@github/time-elements": "^4.0.0",
@ -37,6 +37,7 @@
"animated-value": "^0.2.4",
"animejs": "^3.2.2",
"axios": "^1.6.7",
"camelcase": "^8.0.0",
"cookies-next": "^4.0.0",
"country-list": "^2.3.0",
"country-list-js": "^3.1.8",
@ -75,7 +76,7 @@
"react-tooltip": "^4.5.1",
"react-tsparticles": "^2.12.2",
"react-type-animation": "^3.2.0",
"react-use-websocket": "^4.7.0",
"react-use-websocket": "^4.8.1",
"react-wrap-balancer": "^1.1.0",
"recharts": "2.12.2",
"remark": "^15.0.1",

104
pages/api/bin/wokwi/new.js Normal file
View file

@ -0,0 +1,104 @@
import AirtablePlus from "airtable-plus"
const createProject = async (partsList=[]) => {
const airtable = new AirtablePlus({
apiKey: process.env.AIRTABLE_API_KEY,
baseID: 'appKjALSnOoA0EmPk',
tableName: 'Supported Parts'
})
const parts = [
{ "type": "board-pi-pico-w", "id": "pico", "top": 0, "left": 0, "attrs": {} }
]
await Promise.all(partsList.map(async (part) => {
const airPart = await airtable.read({
filterByFormula: `{Wokwi Name}= "${part}"`,
maxRecords: 1
})
return airPart[0].fields['Wokwi Name'].split(',').forEach((name, i) => {
parts.push({
type: name,
id: name + '-' + i,
left: i * 100, // this is roughtly the width of most parts
})
})
}))
const body = JSON.stringify({
name: "The Bin!",
unlisted: false,
files: [{
name: "help.md",
content: `# Welcome to The Bin! 🦝
Now that you've thrown some parts into The Bin, it's time to turn that trash into treasure! 🗑💎
Wire up your parts and write some code to make them work together.
If you'd like a tutorial, check out some sample projects:
https://jams.hackclub.com/tags/the-bin
You can get help by chatting with other high schoolers on the Hack Club Slack in the #electronics channel:
👉 https://hackclub.com/slack 👈
Once you're ready build your design IRL, click the "Share" button and submit your design:
https://hackclub.com/bin/submit
`
},
{
name: "sketch.ino",
content: `// Now turn this trash into treasure!
// Want some help? You can chat with us on the Hack Club Slack in the #electronics channel
void setup() {
// put your setup code here, to run once:
Serial1.begin(115200);
Serial1.println("Hello, Raspberry Pi Pico W!");
}
void loop() {
// put your main code here, to run repeatedly:
delay(1); // this speeds up the simulation
}`
}, {
name: "diagram.json",
content: JSON.stringify({
"version": 1,
"author": "The Bin - Hack Club",
"editor": "wokwi",
"parts": parts,
"connections": [["pico:GP0", "$serialMonitor:RX", "", []], ["pico:GP1", "$serialMonitor:TX", "", []]], "dependencies": {}
}, null, 2)
}],
})
const response = await fetch('https://wokwi.com/api/projects/save', {
method: 'POST',
cors: 'no-cors',
headers: {
'Content-Type': 'application/json',
'Referer': 'https://wokwi.com/projects/new/pi-pico-w',
'User-Agent': 'Hack Club - contact max@hackclub.com for any complaints!'
},
body
}).catch((e) => {
console.log(e)
})
const data = await response.json()
const { projectId } = data
return `https://wokwi.com/projects/${projectId}`
}
export default async function handler(req, res) {
if (req.method === 'POST') {
const { parts } = req.body
const shareLink = await createProject(parts)
if (shareLink) {
res.status(200).json({ shareLink })
} else {
res.status(500).json({ error: 'Failed to create project' })
}
}
}

View file

@ -0,0 +1,29 @@
import AirtablePlus from "airtable-plus"
import camelcase from "camelcase"
const camelizeObject = (obj) => {
Object.keys(obj).forEach(key => {
obj[camelcase(key)] = obj[key]
if (key !== camelcase(key)) {
delete obj[key]
}
})
return obj
}
const wokwiParts = async () => {
const airtable = new AirtablePlus({
apiKey: process.env.AIRTABLE_API_KEY,
baseID: 'appKjALSnOoA0EmPk',
tableName: 'Supported Parts'
})
const records = await airtable.read()
const parts = records.map(record => camelizeObject(record.fields))
return parts
}
export default async function handler(req, res) {
const data = await wokwiParts()
res.status(200).json(data)
}

View file

@ -234,13 +234,15 @@ export default function Bin() {
cursor={false}
sequence={[
// Same substring at the start will only be typed out once, initially
'an RC car',
'a laser guided nerf gun',
1000, // wait 1s before replacing "Mice" with "Hamsters"
'a clap activated lamp',
1000,
'a keyboard',
'a temperature activated Febreze can',
1000,
'an alarm clock',
'a flame actuated speaker',
1000,
'a light dependant door',
1000
]}
repeat={Infinity}

View file

@ -117,6 +117,33 @@ export default function Apply() {
})
}
>
<Box
sx={{
borderLeft: '3px solid',
borderLeftColor: 'blue',
paddingLeft: 2,
color: 'blue',
fontSize: [1, 2],
textWrap: 'pretty',
lineHeight: 1.375
}}
>
<Text as="p" sx={{ fontSize: [2, 3], fontWeight: 'bold' }}>
Join our waitlist
</Text>
<Text as="p" sx={{ mt: 1, textWrap: 'balance' }}>
HCB has been experiencing some exciting growth and subsequent
capacity constraints. We are prioritizing organizations ran by Hack
Clubbers, teens, FIRST teams, as well as groups with an annual
budget greater than $50k. Please expect to hear back by May 1st,
2024.
</Text>
<Text as="p" sx={{ mt: 1, textWrap: 'balance' }}>
We currently do not work with new organizations outside of STEM,
Education, and Climate.
</Text>
</Box>
<Heading as="h2" variant="headline" sx={{ mb: -2 }}>
Your organization
</Heading>

View file

@ -51,8 +51,10 @@ export default function ApplicationSuccess() {
</Text>
<Text as="p" variant="lead">
<Balancer>
Well review your application and get back to you within two
business days.
We are prioritizing organizations ran by Hack Clubbers, teens, FIRST
teams, as well as groups with an annual budget greater than $50k. If
you fall outside of these categories, you will hear back from us by
May 1st, 2024.
</Balancer>
</Text>
</header>

View file

@ -241,10 +241,11 @@ export default function Page() {
sx={{
bg: 'blue',
backgroundImage: theme => theme.util.gx('cyan', 'blue'),
fontSize: [16, 16, 32],
lineHeight: 0.9
}}
>
Apply now
Join the waitlist
</Button>
</Link>
<Button
@ -603,15 +604,15 @@ export default function Page() {
bg: 'white',
mixBlendMode: 'screen',
color: 'black !important',
fontSize: [58, 96],
fontSize: [36, 64],
width: ['100%', 'auto'],
py: 4,
px: [4, null, 6],
px: [4, null, 5],
lineHeight: 0.9,
textTransform: 'none'
}}
>
Apply now
Join the waitlist
</Button>
</Link>
<Text as="p" variant="lead" sx={{ color: 'white', mb: [0, 0] }}>

View file

@ -40,6 +40,7 @@ import Photo from '../components/photo'
import Comma from '../components/comma'
import Haxidraw from '../components/index/cards/haxidraw'
import Onboard from '../components/index/cards/onboard'
import Apocalypse from '../components/index/cards/apocalypse'
/** @jsxImportSource theme-ui */
@ -203,10 +204,10 @@ function Page({
gradient="linear-gradient(rgba(0,0,0,0.4), rgba(0,0,0,0.45))"
/>
<Announcement
copy="Hop OnBoard and create your first PCB"
caption="Join 1,000 others to create your first circuit board."
href="https://hackclub.com/onboard/"
iconLeft="idea"
copy="Get free boba for making your first website! 🍵"
caption="Follow the tutorial to build your own space on the web."
href="https://workshops.hackclub.com/personal_website"
iconLeft="web"
/>
<Box
sx={{
@ -675,6 +676,7 @@ function Page({
</Text>
</Box>
<Pizza />
<Apocalypse />
<Slack slackKey={slackKey} data={slackData} events={events} />
</Box>
</Box>

View file

@ -141,7 +141,7 @@ const SlackPage = () => {
person="JC"
img="https://ca.slack-edge.com/T0266FRGM-U03MNFDRSGJ-e6fb939acfd8-512"
age={17}
location="CT"
location="MA"
/>
<Quote
text="Finally, I found my people!"

View file

@ -301,6 +301,13 @@ export default function Team({ team }) {
img="/team/ced.png"
pronouns="he/him"
/>
<Bio
name="Kara Massie"
teamRole="Production Lead"
text="Before joining Hack Club, Kara was a lead producer at Activision, shipping Crash Bandicoot N. Sane Trilogy and Bungie's Destiny 2 expansions. Shes deeply committed to inclusivity in gaming and tech spaces, and is beyond thrilled to be part of an org with kindness at its core. She has lived in 3 countries and names her pets after vegetables."
img="/team/kara.png"
pronouns="she/her"
/>
<Bio
name="Sam Poder"
teamRole="Engineering & Operations"

View file

@ -15,10 +15,10 @@
"@jridgewell/gen-mapping" "^0.3.0"
"@jridgewell/trace-mapping" "^0.3.9"
"@apollo/client@^3.9.9":
version "3.9.9"
resolved "https://registry.yarnpkg.com/@apollo/client/-/client-3.9.9.tgz#38f983a1ad24e2687abfced0a9c1c3bef8d32616"
integrity sha512-/sMecU/M0WK9knrguts1lSLV8xFKzIgOMVb4mi6MOxgJXjliDB8PvOtmXhTqh2cVMMR4TzXgOnb+af/690zlQw==
"@apollo/client@^3.9.11":
version "3.9.11"
resolved "https://registry.yarnpkg.com/@apollo/client/-/client-3.9.11.tgz#737e5c35c21d6f3b78423033ad81837a8a6992e0"
integrity sha512-H7e9m7cRcFO93tokwzqrsbnfKorkpV24xU30hFH5u2g6B+c1DMo/ouyF/YrBPdrTzqxQCjTUmds/FLmJ7626GA==
dependencies:
"@graphql-typed-document-node/core" "^3.1.1"
"@wry/caches" "^1.0.0"
@ -3285,6 +3285,11 @@ camelcase@^5.3.1:
resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz"
integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
camelcase@^8.0.0:
version "8.0.0"
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-8.0.0.tgz#c0d36d418753fb6ad9c5e0437579745c1c14a534"
integrity sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==
camelize@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.1.tgz#89b7e16884056331a35d6b5ad064332c91daa6c3"
@ -7571,10 +7576,10 @@ react-type-animation@^3.2.0:
resolved "https://registry.yarnpkg.com/react-type-animation/-/react-type-animation-3.2.0.tgz#6863d5d60e3beb237f2bd690cceb585402c47e6a"
integrity sha512-WXTe0i3rRNKjmggPvT5ntye1QBt0ATGbijeW6V3cQe2W0jaMABXXlPPEdtofnS9tM7wSRHchEvI9SUw+0kUohw==
react-use-websocket@^4.7.0:
version "4.7.0"
resolved "https://registry.yarnpkg.com/react-use-websocket/-/react-use-websocket-4.7.0.tgz#e45545ed48eb60171bf6401d1884cc80c700a0ea"
integrity sha512-YjR62jB7vB94IZy5UPBGZSR3c0hxu796q9IuJ0vbNg7InJ7Z84NHOd/LHzVI5nAKtaGy1oqvf8EmjKxX+cNz4A==
react-use-websocket@^4.8.1:
version "4.8.1"
resolved "https://registry.yarnpkg.com/react-use-websocket/-/react-use-websocket-4.8.1.tgz#be06a0bc956c6d56391a29cbe2caa6ae8edb5615"
integrity sha512-FTXuG5O+LFozmu1BRfrzl7UIQngECvGJmL7BHsK4TYXuVt+mCizVA8lT0hGSIF0Z0TedF7bOo1nRzOUdginhDw==
react-wrap-balancer@^1.1.0:
version "1.1.0"