Enable ESLint (#292)

* Use ESLint

* oops

* Ignore ESLint during builds

* Disable <Image> rule

* Restore quotes and apostrophes
This commit is contained in:
Caleb Denio 2022-01-13 19:28:59 -05:00 committed by GitHub
parent d872e97fc4
commit 790d74d3e7
46 changed files with 1437 additions and 197 deletions

8
.eslintrc.json Normal file
View file

@ -0,0 +1,8 @@
{
"extends": "next/core-web-vitals",
"rules": {
"@next/next/no-img-element": "off",
"react/no-unescaped-entities": "off",
"eqeqeq": "warn"
}
}

23
.github/workflows/ci.yml vendored Normal file
View file

@ -0,0 +1,23 @@
name: CI
on:
- push
- pull_request
jobs:
build:
name: Build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
- run: yarn install
- run: yarn build
lint:
name: Lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
- run: yarn install
- run: yarn lint

View file

@ -207,10 +207,9 @@ function Module({ icon, name, body }) {
/>
<Box>
<Heading sx={{ color: 'snow', lineHeight: '1.5' }}>{name}</Heading>
<Text
sx={{ color: 'muted', lineHeight: '1.375', fontSize: 17 }}
children={body}
/>
<Text sx={{ color: 'muted', lineHeight: '1.375', fontSize: 17 }}>
{body}
</Text>
</Box>
</Box>
)
@ -245,15 +244,12 @@ function Document({ name, cost }) {
sx={{ flexShrink: 0, color: 'green' }}
/>
<Box sx={{ display: 'flex', flexDirection: 'column' }}>
<Text fontSize={2} children={name} />
<Text fontSize={2}>{name}</Text>
{cost && (
<Text
fontSize={1}
color="muted"
style={{ lineHeight: '1.375' }}
children={cost}
/>
<Text fontSize={1} color="muted" style={{ lineHeight: '1.375' }}>
{cost}
</Text>
)}
</Box>
</Box>

View file

@ -144,8 +144,9 @@ function Organization({
lineHeight: 1,
letterSpacing: -0.1
}}
children={name}
/>
>
{name}
</Text>
<br />
<Link
href={`https://${website}`}

View file

@ -73,7 +73,9 @@ function ListItem({ icon, body }) {
size={45}
sx={{ color: 'primary', flexShrink: 'none', flexShrink: 0, mr: 2 }}
/>
<Text fontSize={[32, 48]} variant="lead" children={body} />
<Text fontSize={[32, 48]} variant="lead">
{body}
</Text>
</li>
</Fade>
)

View file

@ -150,8 +150,9 @@ function Event({
color="white"
variant="headline"
sx={{ fontSize: [48, null, 30], letterSpacing: -0.1 }}
children={name}
/>
>
{name}
</Text>
<Box
sx={{
display: 'flex',

View file

@ -97,12 +97,14 @@ function Step({ icon, name, duration }) {
px: 2,
mx: [null, null, 'auto']
}}
children={duration}
/>
>
{duration}
</Badge>
<Text
sx={{ color: 'white', fontSize: 24, maxWidth: [250, null, 500] }}
children={name}
/>
>
{name}
</Text>
</Container>
</Slide>
</TimelineStep>

View file

@ -24,20 +24,13 @@ export default function Bio({ img, name, teamRole, pronouns, text, ...props }) {
</Box>
<Box sx={{ gridColumn: 'span 5' }}>
<Box>
<Text
fontSize={[4, 5]}
variant="headline"
color="black"
children={name}
/>
<Text fontSize={[4, 5]} variant="headline" color="black">
{name}
</Text>
<Flex>
<Text
color="#24B5A5"
variant="subheadline"
fontSize={2}
mr={2}
children={teamRole}
/>
<Text color="#24B5A5" variant="subheadline" fontSize={2} mr={2}>
{teamRole}
</Text>
{pronouns && (
<Text fontSize={1} color="muted" align="center">
({pronouns})
@ -45,7 +38,9 @@ export default function Bio({ img, name, teamRole, pronouns, text, ...props }) {
)}
</Flex>
</Box>
<Text mt={1} mb={0} color="black" children={text} />
<Text mt={1} mb={0} color="black">
{text}
</Text>
</Box>
</Grid>
</Card>

View file

@ -42,9 +42,10 @@ const Service = ({ href, icon, name = '', ...props }) => (
rel="noopener"
href={href}
title={`Hack Club on ${name ? name : icon}`}
children={<Icon glyph={icon} />}
{...props}
/>
>
<Icon glyph={icon} />
</Link>
)
const Footer = ({ dark = false, children, ...props }) => (
@ -83,28 +84,25 @@ const Footer = ({ dark = false, children, ...props }) => (
<Heading as="h2" variant="subheadline" mb={3}>
Hack Club
</Heading>
<Link href="/slack" children="Slack" />
<Link href="/donate" children="Donate" />
<Link href="/team" children="Team" />
<Link href="/jobs" children="Jobs" />
<Link href="/philosophy" children="Philosophy" />
<Link href="/brand" children="Branding" />
<Link href="/press" children="Press Inquiries" />
<Link href="/slack">Slack</Link>
<Link href="/donate">Donate</Link>
<Link href="/team">Team</Link>
<Link href="/jobs">Jobs</Link>
<Link href="/philosophy">Philosophy</Link>
<Link href="/brand">Branding</Link>
<Link href="/press">Press Inquiries</Link>
</Box>
<Box>
<Heading as="h2" variant="subheadline" mb={3}>
Resources
</Heading>
<Link
href="https://hackclub.com/conduct/"
children="Code of Conduct"
/>
<Link href="https://events.hackclub.com/" children="Events" />
<Link href="https://workshops.hackclub.com/" children="Workshops" />
<Link href="https://hackathons.hackclub.com/" children="Hackathons" />
<Link href="/bank" children="Bank" />
<Link href="https://hackclub.com/map/" children="Clubs Map" />
<Link href="https://toolbox.hackclub.com/" children="Toolbox" />
<Link href="https://hackclub.com/conduct/">Code of Conduct</Link>
<Link href="https://events.hackclub.com/">Events</Link>
<Link href="https://workshops.hackclub.com/">Workshops</Link>
<Link href="https://hackathons.hackclub.com/">Hackathons</Link>
<Link href="/bank">Bank</Link>
<Link href="https://hackclub.com/map/">Clubs Map</Link>
<Link href="https://toolbox.hackclub.com/">Toolbox</Link>
</Box>
<Box sx={{ gridColumn: ['span 2', 'span 1'] }}>
<Logo aria-label="Hack Club logo" width={128} height={45} />
@ -167,7 +165,9 @@ const Footer = ({ dark = false, children, ...props }) => (
<Text my={2}>
<Link href="tel:1-855-625-HACK">1-855-625-HACK</Link>
<br />
<Text as="span" color="muted" children="(call toll-free)" />
<Text as="span" color="muted">
(call toll-free)
</Text>
</Text>
</Box>
</Grid>

View file

@ -1,7 +1,9 @@
import { useColorMode } from 'theme-ui'
export default ({ theme }) => {
const ForceTheme = ({ theme }) => {
const [colorMode, setColorMode] = useColorMode()
setColorMode(theme)
return null
}
export default ForceTheme

View file

@ -143,15 +143,15 @@ const NavBar = styled(Box)`
const Navigation = props => (
<NavBar role="navigation" {...props}>
<NextLink href="/slack" passHref>
<Link children="Slack" />
<Link>Slack</Link>
</NextLink>
<Link href="https://workshops.hackclub.com/" children="Workshops" />
<Link href="https://scrapbook.hackclub.com/" children="Scrapbook" />
<Link href="https://workshops.hackclub.com/">Workshops</Link>
<Link href="https://scrapbook.hackclub.com/">Scrapbook</Link>
<NextLink href="/bank" passHref>
<Link children="Bank" />
<Link>Bank</Link>
</NextLink>
<NextLink href="/donate" passHref>
<Link children="Donate" />
<Link>Donate</Link>
</NextLink>
</NavBar>
)

View file

@ -46,8 +46,9 @@ const Photo = ({ src, width, height, alt, showAlt, dark, ...props }) => {
<Caption
as="figcaption"
variant={dark ? 'cards.translucentDark' : 'cards.translucent'}
children={alt}
/>
>
{alt}
</Caption>
)}
</Card>
)

View file

@ -27,7 +27,7 @@ export const EmojiImg = ({ name, ...props }) => (
/>
)
const CustomEmoji = memo(({ name }) => {
const CustomEmoji = memo(function CustomEmoji({ name }) {
const emoji = stripColons(name)
let [image, setImage] = useState()
useEffect(() => {

View file

@ -31,7 +31,7 @@ export const formatText = text =>
?.replace(/https?:\/\//, '')
.replace(/\/$/, '')
return (
<a href={url} target="_blank" rel="noopener" key={i}>
<a href={url} target="_blank" rel="noreferrer" key={i}>
{children}
</a>
)

View file

@ -2,7 +2,7 @@ import { Link, Avatar } from 'theme-ui'
import { memo, useState, useEffect } from 'react'
import { trim } from 'lodash'
const Mention = memo(({ username }) => {
const Mention = memo(function Mention({ username }) {
const [img, setImg] = useState(null)
useEffect(() => {
try {

View file

@ -15,7 +15,7 @@ const emoji = ['🚀', '🥳', '😂', '💖', '👀', '👍', '🙌', '🙂', '
const colors = ['red', 'orange', 'yellow', 'green', 'cyan', 'blue', '#8067c3']
const Channel = ({ color, channel }) => (
<Text as="strong" color={color} children={channel} />
<Text as="strong" color={color}>{ channel }</Text>
)
const whitelistedChannels = new Set(

View file

@ -39,8 +39,9 @@ const Stat = ({
letterSpacing: 'title',
my: 0
}}
children={value || '—'}
/>
>
{value || '—'}
</Text>
{!isEmpty(unit) && (
<Text
as="sup"
@ -51,8 +52,9 @@ const Stat = ({
mr: [null, 1],
pt: [null, 1]
}}
children={unit}
/>
>
{unit}
</Text>
)}
{!isEmpty(of) && (
<Text
@ -66,8 +68,9 @@ const Stat = ({
content: '"/"'
}
}}
children={of}
/>
>
{of}
</Text>
)}
</Flex>
{!isEmpty(label) && (
@ -79,8 +82,9 @@ const Stat = ({
letterSpacing: 'headline',
textTransform: 'uppercase'
}}
children={label}
/>
>
{label}
</Text>
)}
</Flex>
)

View file

@ -1,6 +1,6 @@
import { Grid, Card, Label, Input, Select } from 'theme-ui'
import useForm from '../../lib/use-form'
import { countries } from '../../lib/countries'
import countries from '../../lib/countries'
import Submit from '../submit'
const RequestForm = () => {
@ -65,8 +65,8 @@ const RequestForm = () => {
<option value="" selected disabled>
Choose a country
</option>
{Object.entries(countries).map(country => (
<option value={country.slice(1)}>{country.slice(1)}</option>
{countries.countries.map(country => (
<option value={country} key={country}>{country}</option>
))}
</Select>
</Label>

View file

@ -52,9 +52,10 @@ const Submit = ({
...sx
}}
disabled={status === 'submitting'}
children={status === 'submitting' ? 'Submitting…' : labels[status]}
{...props}
/>
>
{status === 'submitting' ? 'Submitting…' : labels[status]}
</Button>
)
export default Submit

View file

@ -1,4 +1,7 @@
const nextConfig = {
eslint: {
ignoreDuringBuilds: true
},
trailingSlash: true,
pageExtensions: ['js', 'jsx', 'mdx'],
images: {

View file

@ -7,7 +7,8 @@
"scripts": {
"dev": "next",
"build": "next build",
"start": "next start"
"start": "next start",
"lint": "next lint"
},
"dependencies": {
"@emotion/react": "^11.7.1",
@ -37,5 +38,8 @@
"theme-ui": "^0.13",
"turndown": "^7.1.1"
},
"devDependencies": {}
"devDependencies": {
"eslint": "8.6.0",
"eslint-config-next": "12.0.8"
}
}

View file

@ -24,7 +24,7 @@ const org = {
]
}
export default class extends Document {
class MyDocument extends Document {
static async getInitialProps(ctx) {
const initialProps = await Document.getInitialProps(ctx)
return { ...initialProps }
@ -49,3 +49,5 @@ export default class extends Document {
)
}
}
export default MyDocument

View file

@ -1,4 +1,4 @@
export default async (req, res) => {
export default async function handler(req, res) {
// returns a url_private for the latest image posted in #dogs
const fileList = await fetch(`https://slack.com/api/files.list?token=${process.env.SCRAPPY_TOKEN}&channel=CDJV1CXC2&count=1`)
.then(r => r.json())

View file

@ -6,18 +6,18 @@ const joinTable = new AirtablePlus({
tableName: 'Join Requests'
})
export default async (req, res) => {
if (req.method == 'OPTIONS') {
export default async function handler(req, res) {
if (req.method === 'OPTIONS') {
return res
.status(204)
.json({ status: 'YIPPE YAY. YOU HAVE CLEARANCE TO PROCEED.' })
}
if (req.method == 'GET') {
if (req.method === 'GET') {
return res
.status(405)
.json({ error: '*GET outta here!* (Method not allowed, use POST)' })
}
if (req.method == 'PUT') {
if (req.method === 'PUT') {
return res.status(405).json({
error: '*PUT that request away!* (Method not allowed, use POST)'
})

View file

@ -11,7 +11,7 @@ const addressesTable = new AirtablePlus({
tableName: 'Addresses'
})
export default async (req, res) => {
export default async function handler(req, res) {
if (req.method === 'POST') {
const data = req.body

View file

@ -35,7 +35,7 @@ export default function Bank() {
description="Hack Club Bank provides a 501(c)(3) status-backed fund optimized for high school hackathons including invoicing, debit cards, check sending, pre-written legal forms, automated tax filing, and transparent finances. Get fiscal sponsorship designed to help you run a great organization."
image="https://cloud-og86rfngo-hack-club-bot.vercel.app/0og_image-2.png"
/>
<style children={styles} />
<style>{ styles }</style>
<Box>
<Landing />
<Features />

View file

@ -341,8 +341,6 @@ const Page = () => (
<Text
as="p"
variant="subtitle"
as="p"
variant="lead"
sx={{ mt: 0, a: { variant: 'styles.a', color: 'blue' } }}
>
<strong>Everyone gets hacking, individually.</strong> Not hacking
@ -545,8 +543,8 @@ const Page = () => (
Use our 501(c)(3) status and a restricted fund with{' '}
<Link href="/bank">
<a>Hack Club Bank</a>
</Link>
{' '}to fundraise, accept donations, buy things!
</Link>{' '}
to fundraise, accept donations, buy things!
</>
}
/>
@ -579,8 +577,8 @@ const Page = () => (
name="A basket of free tools"
desc={
<>
Free subscriptions to Figma Pro, Postman, and more for
running a great club.
Free subscriptions to Figma Pro, Postman, and more for running a
great club.
</>
}
/>

View file

@ -5,7 +5,7 @@ import Meta from '@hackclub/meta'
import JobDescription from '../../components/jobs/bank-ops-associate/jd.mdx'
import ForceTheme from '../../components/force-theme'
export default () => (
const Page = () => (
<>
<Meta
as={Head}
@ -45,3 +45,5 @@ export default () => (
</Container>
</>
)
export default Page

View file

@ -5,7 +5,7 @@ import Meta from '@hackclub/meta'
import JobDescription from '../../components/jobs/bank-ops-lead/jd.mdx'
import ForceTheme from '../../components/force-theme'
export default () => (
const Page = () => (
<>
<Meta
as={Head}
@ -45,3 +45,5 @@ export default () => (
</Container>
</>
)
export default Page

View file

@ -5,7 +5,7 @@ import Meta from '@hackclub/meta'
import JobDescription from '../../components/jobs/bank-tech-lead/jd.mdx'
import ForceTheme from '../../components/force-theme'
export default () => (
const Page = () => (
<>
<Meta
as={Head}
@ -45,3 +45,5 @@ export default () => (
</Container>
</>
)
export default Page

View file

@ -5,7 +5,7 @@ import Meta from '@hackclub/meta'
import JobDescription from '../../components/jobs/brand-director/jd.mdx'
import ForceTheme from '../../components/force-theme'
export default () => (
const Page = () => (
<>
<Meta
as={Head}
@ -45,3 +45,5 @@ export default () => (
</Container>
</>
)
export default Page

View file

@ -5,7 +5,7 @@ import Meta from '@hackclub/meta'
import JobDescription from '../../components/jobs/clubs-lead/jd.mdx'
import ForceTheme from '../../components/force-theme'
export default () => (
const Page = () => (
<>
<Meta
as={Head}
@ -45,3 +45,5 @@ export default () => (
</Container>
</>
)
export default Page

View file

@ -5,7 +5,7 @@ import Meta from '@hackclub/meta'
import JobDescription from '../../components/jobs/communications-manager/jd.mdx'
import ForceTheme from '../../components/force-theme'
export default () => (
const Page = () => (
<>
<Meta
as={Head}
@ -45,3 +45,5 @@ export default () => (
</Container>
</>
)
export default Page

View file

@ -5,7 +5,7 @@ import Meta from '@hackclub/meta'
import JobDescription from '../../components/jobs/education-engineer/jd.mdx'
import ForceTheme from '../../components/force-theme'
export default () => (
const Page = () => (
<>
<Meta
as={Head}
@ -45,3 +45,5 @@ export default () => (
</Container>
</>
)
export default Page

View file

@ -5,7 +5,7 @@ import Meta from '@hackclub/meta'
import ForceTheme from '../../components/force-theme'
import Photo from '../../components/photo'
export default () => (
const Page = () => (
<>
<Meta
as={Head}
@ -41,11 +41,16 @@ export default () => (
fontSize: [2, 3]
}}
>
<Heading variant="headline" sx={{ fontWeight: 700, fontSize: [4, 5], mb: 4 }}>
<Heading
variant="headline"
sx={{ fontWeight: 700, fontSize: [4, 5], mb: 4 }}
>
Hack Club is hiring an Events Designer!
</Heading>
<Text as="p" sx={{ fontWeight: 700 }}>We do crazy things...</Text>
<Text as="p" sx={{ fontWeight: 700 }}>
We do crazy things...
</Text>
<Grid
my={3}
@ -54,16 +59,65 @@ export default () => (
sx={{
'> div': {
p: 3,
fontSize: 2,
fontSize: 2
}
}}
>
<Card variant="sunken">42 Hack Clubbers <Link href="https://www.youtube.com/watch?v=2BID8_pGuqA" target="_blank" rel="noopener noreferrer">rode a train</Link> across America to SpaceX.</Card>
<Card variant="sunken">We hosted <Link href="https://hackclub.com/amas/" target="_blank" rel="noopener noreferrer">AMAs</Link> with people like <Link href="https://www.youtube.com/watch?v=riru9OzScwk" target="_blank" rel="noopener noreferrer">Elon Musk</Link> and <Link href="https://www.youtube.com/watch?v=gw3vyFZ4oeU" target="_blank" rel="noopener noreferrer">Grant Sanderson</Link>.</Card>
<Card variant="sunken">We gave 300 teenagers $50,000 for <Link href="https://summer.hackclub.com/" target="_blank" rel="noopener noreferrer">their hardware projects</Link>.</Card>
<Card variant="sunken">
42 Hack Clubbers{' '}
<Link
href="https://www.youtube.com/watch?v=2BID8_pGuqA"
target="_blank"
rel="noopener noreferrer"
>
rode a train
</Link>{' '}
across America to SpaceX.
</Card>
<Card variant="sunken">
We hosted{' '}
<Link
href="https://hackclub.com/amas/"
target="_blank"
rel="noopener noreferrer"
>
AMAs
</Link>{' '}
with people like{' '}
<Link
href="https://www.youtube.com/watch?v=riru9OzScwk"
target="_blank"
rel="noopener noreferrer"
>
Elon Musk
</Link>{' '}
and{' '}
<Link
href="https://www.youtube.com/watch?v=gw3vyFZ4oeU"
target="_blank"
rel="noopener noreferrer"
>
Grant Sanderson
</Link>
.
</Card>
<Card variant="sunken">
We gave 300 teenagers $50,000 for{' '}
<Link
href="https://summer.hackclub.com/"
target="_blank"
rel="noopener noreferrer"
>
their hardware projects
</Link>
.
</Card>
</Grid>
<Text as="p">We're looking for someone <strong>fun, creative, and technical</strong> to excite and grow the community.</Text>
<Text as="p">
We're looking for someone <strong>fun, creative, and technical</strong>{' '}
to excite and grow the community.
</Text>
<Grid my={5} gap={5} columns={[null, null, 2]}>
<Box>
@ -77,36 +131,53 @@ export default () => (
pr: [0, 0, 5],
'> div': {
p: 3,
fontSize: 2,
fontSize: 2
}
}}
>
<Card sx={{
background: 'radial-gradient(ellipse farthest-corner at top left, #ff8c37, #ec3750)',
color: 'white'
}}>
You're passionate about building technical projects and find tinkering fun
<Card
sx={{
background:
'radial-gradient(ellipse farthest-corner at top left, #ff8c37, #ec3750)',
color: 'white'
}}
>
You're passionate about building technical projects and find
tinkering fun
</Card>
<Card sx={{
background: 'linear-gradient(-32deg, #6f31b7 14%, #c6479e 82%)',
color: 'white'
}}>
You've worked with teenagers and are excited to work 1:1 with them every day
<Card
sx={{
background: 'linear-gradient(-32deg, #6f31b7 14%, #c6479e 82%)',
color: 'white'
}}
>
You've worked with teenagers and are excited to work 1:1 with them
every day
</Card>
<Card sx={{
background: 'linear-gradient(120deg, #0e5ea0 0%, #338eda 100%)',
color: 'white'
}}>
You have event planning or media production experience and want to apply it
<Card
sx={{
background: 'linear-gradient(120deg, #0e5ea0 0%, #338eda 100%)',
color: 'white'
}}
>
You have event planning or media production experience and want to
apply it
</Card>
</Flex>
<Box sx={{ fontSize: 2, p: { my: 3 } }}>
<Text as="p">We have a strong preference for someone in-person in Vermont, but we will consider applications from people who want to work remotely, provided they are willing to travel to our offices.</Text>
<Text as="p">
We have a strong preference for someone in-person in Vermont, but
we will consider applications from people who want to work
remotely, provided they are willing to travel to our offices.
</Text>
<Text as="p">Relocation assistance available. We have COVID protocols and take them seriously.</Text>
<Text as="p">
Relocation assistance available. We have COVID protocols and take
them seriously.
</Text>
</Box>
</Box>
@ -125,30 +196,84 @@ export default () => (
}
}}
>
<Card variant="sunken">Produce and project manage the big, crazy things we do every few months</Card>
<Card variant="sunken">Support Hack Clubbers in creating and executing <Link href="https://scrapbook.hackclub.com/" target="_blank" rel="noopener noreferrer">their awesome ideas</Link></Card>
<Card variant="sunken">Revive <Link href="https://hackclub.com/night/" target="_blank" rel="noopener noreferrer">Hack Night</Link>, our weekly casual technical hangout with the community</Card>
<Card variant="sunken">Lead on organizing AMAs and conversations with famous tech leaders</Card>
<Card variant="sunken">Game design events at Hack Club to better help students form meaningful relationships</Card>
<Card variant="sunken">
Produce and project manage the big, crazy things we do every few
months
</Card>
<Card variant="sunken">
Support Hack Clubbers in creating and executing{' '}
<Link
href="https://scrapbook.hackclub.com/"
target="_blank"
rel="noopener noreferrer"
>
their awesome ideas
</Link>
</Card>
<Card variant="sunken">
Revive{' '}
<Link
href="https://hackclub.com/night/"
target="_blank"
rel="noopener noreferrer"
>
Hack Night
</Link>
, our weekly casual technical hangout with the community
</Card>
<Card variant="sunken">
Lead on organizing AMAs and conversations with famous tech leaders
</Card>
<Card variant="sunken">
Game design events at Hack Club to better help students form
meaningful relationships
</Card>
</Flex>
</Box>
</Grid>
<Heading variant="headline" sx={{ fontWeight: 700, fontSize: [4, 5], mb: 4 }}>
Hack Club is where 16,000+ teenage programmers talk, build, and have fun together.
<Heading
variant="headline"
sx={{ fontWeight: 700, fontSize: [4, 5], mb: 4 }}
>
Hack Club is where 16,000+ teenage programmers talk, build, and have fun
together.
</Heading>
<Grid my={4} gap={3} columns={[null, 2, 3]}>
<Photo
src="/home/flagship_4.jpg"
alt={<>Hack Clubbers at <Link href="https://photos.app.goo.gl/F5JDxq5FzfhofTMD9" target="_blank" rel="noopener noreferrer">Flagship</Link></>}
alt={
<>
Hack Clubbers at{' '}
<Link
href="https://photos.app.goo.gl/F5JDxq5FzfhofTMD9"
target="_blank"
rel="noopener noreferrer"
>
Flagship
</Link>
</>
}
width={500}
height={326.5}
showAlt
/>
<Photo
src="/home/golden-train.png"
alt={<>The <Link href="https://zephyr.hackclub.com/" target="_blank" rel="noopener noreferrer">world's longest hackathon</Link> on land</>}
alt={
<>
The{' '}
<Link
href="https://zephyr.hackclub.com/"
target="_blank"
rel="noopener noreferrer"
>
world's longest hackathon
</Link>{' '}
on land
</>
}
width={500}
height={326.5}
sx={{ display: ['none', 'none', 'block'] }}
@ -165,16 +290,57 @@ export default () => (
</Grid>
<Box sx={{ p: { my: [3, 4] } }}>
<Text as="p">This is not a normal job. For the last 18 months, a <Link href="https://hackclub.com/team/" target="_blank" rel="noopener noreferrer">small team</Link> has produced a series of online events, and we're excited to hire an incredible, technical person to carry forward and build on these ideas. You'd be our 9th or so full-time staff member.</Text>
<Text as="p">
This is not a normal job. For the last 18 months, a{' '}
<Link
href="https://hackclub.com/team/"
target="_blank"
rel="noopener noreferrer"
>
small team
</Link>{' '}
has produced a series of online events, and we're excited to hire an
incredible, technical person to carry forward and build on these
ideas. You'd be our 9th or so full-time staff member.
</Text>
<Text as="p">In the <Link href="https://hackclub.com/slack/" target="_blank" rel="noopener noreferrer">Hack Club Slack</Link>, you'll work with our community to create the best and most inclusive place on the internet for technical teenagers. To work at Hack Club, you need to have a background in programming, but <strong>you should be inspired by making things fun.</strong></Text>
<Text as="p">
In the{' '}
<Link
href="https://hackclub.com/slack/"
target="_blank"
rel="noopener noreferrer"
>
Hack Club Slack
</Link>
, you'll work with our community to create the best and most inclusive
place on the internet for technical teenagers. To work at Hack Club,
you need to have a background in programming, but{' '}
<strong>you should be inspired by making things fun.</strong>
</Text>
<Text as="p">We are actively looking for candidates who have worked successfully with girl hackers before. We invite and encourage all interested candidates to apply even if they don't feel they meet all of the criteria.</Text>
<Text as="p">
We are actively looking for candidates who have worked successfully
with girl hackers before. We invite and encourage all interested
candidates to apply even if they don't feel they meet all of the
criteria.
</Text>
<Text as="p">This role pays between $60K - $100K, depending on your experience&mdash; and we know that's probably less than you'd make elsewhere. We offer healthcare and 4 weeks paid vacation.</Text>
<Text as="p">
This role pays between $60K - $100K, depending on your
experience&mdash; and we know that's probably less than you'd make
elsewhere. We offer healthcare and 4 weeks paid vacation.
</Text>
</Box>
<Flex sx={{ flexDirection: ['column', 'column', 'row'], gap: 4, fontSize: 2, my: 5 }}>
<Flex
sx={{
flexDirection: ['column', 'column', 'row'],
gap: 4,
fontSize: 2,
my: 5
}}
>
<Box sx={{ flex: 1, maxWidth: [null, null, 400] }}>
<Photo
src="/hq.jpg"
@ -186,15 +352,39 @@ export default () => (
</Box>
<Box sx={{ flex: 1, p: { mb: 3 } }}>
<Box as="p">The mission of Hack Club is to be a place where teenagers can become more technical, feel welcome in getting started, and feel inspired to build with code in ways that are always honest, transparent, high-integrity, kind, and friendly. We want teenagers to self-organize and assert themselves as persons.</Box>
<Box as="p">Already, Hack Club is the <strong>largest network of teen coders in the country</strong>. We hope for a world where Hack Club becomes a nationwide cultural institution, creating a new generation of young people with the skills, network, and value system to become problem-solvers and builders for the 21st century&mdash; a new Boy and Girl Scouts.</Box>
<Box as="p">
The mission of Hack Club is to be a place where teenagers can become
more technical, feel welcome in getting started, and feel inspired
to build with code in ways that are always honest, transparent,
high-integrity, kind, and friendly. We want teenagers to
self-organize and assert themselves as persons.
</Box>
<Box as="p">
Already, Hack Club is the{' '}
<strong>largest network of teen coders in the country</strong>. We
hope for a world where Hack Club becomes a nationwide cultural
institution, creating a new generation of young people with the
skills, network, and value system to become problem-solvers and
builders for the 21st century&mdash; a new Boy and Girl Scouts.
</Box>
</Box>
</Flex>
<Box as="p" mt={5}>
<strong>How to apply:</strong> Email <Link href="mailto:jobs@hackclub.com" target="_blank" rel="noopener noreferrer">jobs@hackclub.com</Link> with "golden" in the subject line, 3 bullet points demonstrating why you would be exceptional for the role, and your resume.
<strong>How to apply:</strong> Email{' '}
<Link
href="mailto:jobs@hackclub.com"
target="_blank"
rel="noopener noreferrer"
>
jobs@hackclub.com
</Link>{' '}
with "golden" in the subject line, 3 bullet points demonstrating why you
would be exceptional for the role, and your resume.
</Box>
</Container>
</>
)
export default Page

View file

@ -5,7 +5,7 @@ import Meta from '@hackclub/meta'
import JobDescription from '../../components/jobs/executive-assistant/jd.mdx'
import ForceTheme from '../../components/force-theme'
export default () => (
const Page = () => (
<>
<Meta
as={Head}
@ -45,3 +45,5 @@ export default () => (
</Container>
</>
)
export default Page

View file

@ -1,13 +1,6 @@
import React from 'react'
import styled from '@emotion/styled'
import {
Box,
Container,
Heading,
Card,
Text,
Grid
} from 'theme-ui'
import { Box, Container, Heading, Card, Text, Grid } from 'theme-ui'
import Head from 'next/head'
import Meta from '@hackclub/meta'
import ForceTheme from '/components/force-theme'
@ -79,7 +72,7 @@ const JobListing = ({
</Sheet>
)
export default () => (
const Page = () => (
<>
<Meta
as={Head}
@ -115,7 +108,14 @@ export default () => (
>
Join the Hack Club Team
</Heading>
<Heading sx={{ color: 'smoke', mt: 3, fontSize: ["18px", "24px"], lineHeight: ["1.5", "1.125"] }}>
<Heading
sx={{
color: 'smoke',
mt: 3,
fontSize: ['18px', '24px'],
lineHeight: ['1.5', '1.125']
}}
>
<Text
sx={{
bg: 'dark',
@ -197,3 +197,5 @@ export default () => (
<Footer key="footer" />
</>
)
export default Page

View file

@ -5,7 +5,7 @@ import Meta from '@hackclub/meta'
import JobDescription from '../../components/jobs/journalist/jd.mdx'
import ForceTheme from '../../components/force-theme'
export default () => (
const Page = () => (
<>
<Meta
as={Head}
@ -45,3 +45,5 @@ export default () => (
</Container>
</>
)
export default Page

View file

@ -5,7 +5,7 @@ import Meta from '@hackclub/meta'
import JobDescription from '../../components/jobs/philanthropy-position/jd.mdx'
import ForceTheme from '../../components/force-theme'
export default () => (
const Page = () => (
<>
<Meta
as={Head}
@ -45,3 +45,5 @@ export default () => (
</Container>
</>
)
export default Page

View file

@ -18,7 +18,7 @@ import FadeIn from '../components/fade-in'
import Icon from '../components/icon'
import Footer from '../components/footer'
export default () => (
const Page = () => (
<>
<Meta
as={Head}
@ -131,3 +131,5 @@ export default () => (
<Footer dark />
</>
)
export default Page

View file

@ -36,7 +36,7 @@ const twinkling = keyframes`
const color = '#50E3C2'
export default () => (
const Page = () => (
<>
<Meta
as={Head}
@ -143,3 +143,5 @@ export default () => (
<Footer dark />
</>
)
export default Page

View file

@ -168,6 +168,7 @@ const Page = ({ repos }) => (
})
.map(repo => (
<Flex
key={repo.id}
sx={{
alignItems: 'center',
color: 'black',

View file

@ -118,10 +118,10 @@ export default function Philosophy() {
px={3}
align="left"
>
<Ultraline children="Were" />
<Ultraline children="at our best" />
<Ultraline children="when were" />
<Ultraline children="making." />
<Ultraline>We're</Ultraline>
<Ultraline>at our best</Ultraline>
<Ultraline>when we're</Ultraline>
<Ultraline>making.</Ultraline>
<Seal pt={[3, 4]}>
<Heading
fontSize={[1, 2]}

View file

@ -19,7 +19,7 @@ import ForceTheme from '../components/force-theme'
import Footer from '../components/footer'
import PrestonWernerCopy from '../components/preston-werner/copy.mdx'
export default () => (
const Page = () => (
<>
<Meta
as={Head}
@ -51,8 +51,9 @@ export default () => (
}
}}
>
I love that Hack Club is <span>helping me make it possible</span>{''} for more students to have opportunities like I had as a young person"
I love that Hack Club is <span>helping me make it possible</span>
{''} for more students to have opportunities like I had as a young
person"
</Heading>
<Text variant="headline" sx={{ display: 'inline-flex' }}>
@ -143,7 +144,7 @@ export default () => (
Jan 27, 2021
</Badge>
</Flex>
<PrestonWernerCopy/>
<PrestonWernerCopy />
</Container>
<Box
as="section"
@ -162,8 +163,9 @@ export default () => (
</Heading>
<Text variant="subtitle" sx={{ lineHeight: 'caption', mb: 3 }}>
Hack Club is a global community of high school hackers & student-led
Hack Clubs. Join the community-led 24/7 Hack Club Slack of 11k+ teenagers
learning to code & building amazing projects. Youll fit right in.
Hack Clubs. Join the community-led 24/7 Hack Club Slack of 11k+
teenagers learning to code & building amazing projects. Youll fit
right in.
</Text>
<NextLink href="/" passHref>
<Button bg="cyan" as="a">
@ -176,3 +178,5 @@ export default () => (
<Footer />
</>
)
export default Page

View file

@ -84,14 +84,14 @@ const Page = () => (
caps
>
<FadeIn delay={300} duration={600}>
It's&nbsp;2021,
It's 2021,
</FadeIn>
<FadeIn delay={1200} duration={600}>
the&nbsp;holidays&nbsp;have&nbsp;come,
the holidays have come,
<br />
</FadeIn>
<FadeIn delay={2300} duration={600}>
now&nbsp;let's&nbsp;all have&nbsp;some&nbsp;fun!
now let's all have some fun!
</FadeIn>
</Heading>
<Image
@ -118,16 +118,11 @@ const Page = () => (
my={3}
mx="auto"
>
Christmas is here and it's time for some fun! The holiday season is{' '}
<RemoveSpace>
among
<Space className="space" children={' '} />
us
</RemoveSpace>{' '}
and the elves have assembled, which means its time for gift-giving
to begin! The magical elf will assign you a partner, send them
something fun, & youll get your own gift in the mail just in time
for the holidays!
Christmas is here and it's time for some fun! The holiday season is
among us and the elves have assembled, which means its time for
gift-giving to begin! The magical elf will assign you a partner,
send them something fun, &amp; you'll get your own gift in the mail
just in time for the holidays!
</Lead>
{/* Signup form */}
{/* <Signup /> */}

1007
yarn.lock

File diff suppressed because it is too large Load diff