diff --git a/app/components/AdGrid.css.ts b/app/components/AdGrid.css.ts index 3506d64..e83f3d1 100644 --- a/app/components/AdGrid.css.ts +++ b/app/components/AdGrid.css.ts @@ -66,7 +66,7 @@ export const h1 = style({ "@media": { [breakpoints.medium]: { fontSize: `clamp(5rem, 9vw, 8rem)`, - fontWeight: "700", + fontWeight: vars.weights.large, }, }, diff --git a/app/components/AnchorWithArrow.css.ts b/app/components/AnchorWithArrow.css.ts index 453de53..ce871c7 100644 --- a/app/components/AnchorWithArrow.css.ts +++ b/app/components/AnchorWithArrow.css.ts @@ -1,9 +1,8 @@ import { style } from "@vanilla-extract/css"; export const anchor = style({ - display: "flex", - gap: "0.25em", - justifyContent: "flex-start", + alignItems: "center", + display: "inline-flex", }); export const arrow = style({ diff --git a/app/components/AnchorWithArrow.tsx b/app/components/AnchorWithArrow.tsx index c4620b8..58b0f51 100644 --- a/app/components/AnchorWithArrow.tsx +++ b/app/components/AnchorWithArrow.tsx @@ -12,7 +12,6 @@ export function AnchorWithArrow({ children, href }: AnchorWithArrowProps) { href={href} rel="noreferrer" target="_blank" - variant="heavy" > {children} diff --git a/app/components/EventDetails.tsx b/app/components/EventDetails.tsx index 99d5fec..4f43247 100644 --- a/app/components/EventDetails.tsx +++ b/app/components/EventDetails.tsx @@ -3,6 +3,7 @@ import { EventData } from "~/schemas"; import { AnchorWithArrow } from "./AnchorWithArrow"; import * as styles from "./EventDetails.css"; +import { UnorderedList } from "./UnorderedList"; export interface EventDetailsProps { active?: boolean; @@ -23,11 +24,26 @@ export function EventDetails({ active, event }: EventDetailsProps) {

{formatDate(event.date)}

{event.location}
- + {active ? "Register Now" : "Event Info"} diff --git a/app/components/UnorderedList.css.ts b/app/components/UnorderedList.css.ts new file mode 100644 index 0000000..0e7379f --- /dev/null +++ b/app/components/UnorderedList.css.ts @@ -0,0 +1,3 @@ +import { bodyText } from "./BodyText.css"; + +export const unorderedList = bodyText; diff --git a/app/components/UnorderedList.tsx b/app/components/UnorderedList.tsx new file mode 100644 index 0000000..3e239d6 --- /dev/null +++ b/app/components/UnorderedList.tsx @@ -0,0 +1,12 @@ +import clsx from "clsx"; +import React from "react"; + +import * as styles from "./UnorderedList.css"; + +export interface UnorderedListProps extends React.PropsWithChildren { + className?: string; +} + +export function UnorderedList({ children, className }: UnorderedListProps) { + return ; +} diff --git a/app/data/events.json b/app/data/events.json index 31efa61..892772f 100644 --- a/app/data/events.json +++ b/app/data/events.json @@ -5,8 +5,20 @@ "location": "Microsoft NERD Center", "time": "5:30pm - 8:30pm", "topics": [ - "Declarative Builds and Deployments with Nix", - "Supabase is Sweet" + { + "author": { + "name": "Xavier Ruiz", + "url": "https://xav.ie" + }, + "title": "Declarative Builds and Deployments with Nix" + }, + { + "author": { + "name": "Josh Goldberg", + "url": "https://joshuakgoldberg.com/" + }, + "title": "Supabase is Sweet" + } ] }, { @@ -15,8 +27,19 @@ "location": "Microsoft NERD Center", "time": "5:30pm - 8:30pm", "topics": [ - "Web Observables! In The Platform!", - "Coding for the Common Good with BUILD UMass" + { + "author": { + "name": "Dominic Farolino" + }, + "title": "Web Observables! In The Platform!" + }, + { + "author": { + "name": "Abhijit Ajit Kamath", + "url": "https://abhijitkamath.com/" + }, + "title": "Coding for the Common Good with BUILD UMass" + } ] }, { @@ -25,8 +48,14 @@ "location": "Microsoft NERD Center", "time": "5:30pm - 8:30pm", "topics": [ - "What's New in TypeScript 5.5", - "Group Discussion: Learning TypeScript" + { + "author": { + "name": "Josh Goldberg", + "url": "https://joshuakgoldberg.com/" + }, + "title": "What's New in TypeScript 5.5" + }, + { "title": "Group Discussion: Learning TypeScript" } ] }, { @@ -35,8 +64,19 @@ "location": "Microsoft NERD Center", "time": "5:30pm - 8:30pm", "topics": [ - "Every Single Thing You Can Do With Destructuring", - "Conference And Meetup Talk Proposals Helpful Tips" + { + "author": { + "name": "Dimitri Mitropoulos" + }, + "title": "Every Single Thing You Can Do With Destructuring" + }, + { + "author": { + "name": "Anna Astori", + "url": "https://www.linkedin.com/in/anna-astori/" + }, + "title": "Conference And Meetup Talk Proposals Helpful Tips" + } ] }, { @@ -45,9 +85,26 @@ "location": "Microsoft NERD Center", "time": "6:00pm - 8:30pm", "topics": [ - "What's New in TypeScript 5.4", - "It's Dangerous to Go to Runtime! Take Your (Ark)Types", - "How to Become a Fake Polyglot Programmer" + { + "author": { + "name": "Josh Goldberg", + "url": "https://joshuakgoldberg.com/" + }, + "title": "What's New in TypeScript 5.4" + }, + { + "author": { + "name": "David Blass", + "url": "https://x.com/ssalbdivad" + }, + "title": "It's Dangerous to Go to Runtime! Take Your (Ark)Types" + }, + { + "author": { + "name": "Nnenna Ndukwe" + }, + "title": "How to Become a Fake Polyglot Programmer" + } ] } ] diff --git a/app/routes/about.tsx b/app/routes/about.tsx index 818d730..a7b224d 100644 --- a/app/routes/about.tsx +++ b/app/routes/about.tsx @@ -4,6 +4,7 @@ import { ExternalAnchor } from "~/components/Anchor"; import { BodyText } from "~/components/BodyText"; import { Heading } from "~/components/Heading"; import { Layout } from "~/components/Layout"; +import { UnorderedList } from "~/components/UnorderedList"; import { createMeta, site } from "~/config"; const tagline = `We meet once every month or two to chat about our favorite typed superset of JavaScript.`; @@ -42,7 +43,7 @@ export default function About() { . - + The Website Built with React, Remix, TypeScript, Vanilla Extract, and Vite. diff --git a/app/routes/speak.tsx b/app/routes/speak.tsx index 7b0426c..c84351c 100644 --- a/app/routes/speak.tsx +++ b/app/routes/speak.tsx @@ -6,6 +6,7 @@ import { Aside } from "~/components/Aside"; import { BodyText } from "~/components/BodyText"; import { Heading } from "~/components/Heading"; import { Layout } from "~/components/Layout"; +import { UnorderedList } from "~/components/UnorderedList"; import { createMeta } from "~/config"; const tagline = `No prior experience or TypeScript expertise required!`; @@ -30,16 +31,14 @@ export default function About() { Boston TS Club Speaking Form - - All we ask is: -
    -
  • - Send us your slides 24 hours in advance, so we can check them for - accessibility -
  • -
  • Be prepared to chat about your talk with attendees
  • -
-
+ All we ask is: + +
  • + Send us your slides 24 hours in advance, so we can check them for + accessibility +
  • +
  • Be prepared to chat about your talk with attendees
  • +
    We're happy to give you all the support you need for a great experience, including talk ideation, slides review, and feedback on a dry run. 💙 diff --git a/app/schemas.ts b/app/schemas.ts index 82078a1..fa966ea 100644 --- a/app/schemas.ts +++ b/app/schemas.ts @@ -5,7 +5,17 @@ export const eventSchema = z.object({ link: z.string(), location: z.string(), time: z.string(), - topics: z.array(z.string()), + topics: z.array( + z.object({ + author: z + .object({ + name: z.string(), + url: z.string().nullish(), + }) + .nullish(), + title: z.string(), + }), + ), }); export type EventData = z.infer; diff --git a/cspell.json b/cspell.json index baa9e96..3d9381d 100644 --- a/cspell.json +++ b/cspell.json @@ -10,17 +10,25 @@ "pnpm-lock.yaml" ], "words": [ + "Abhijit", + "Ajit", "Astori", "Blass", "bluesky", "bostonts", "clsx", "currentcolor", + "Dimitri", + "Farolino", "Hadley", "isbot", "Jérémie", + "Kamath", "knip", "Mariah", + "Mitropoulos", + "Ndukwe", + "Nnenna", "packagejson", "Sanker", "Supabase" diff --git a/package.json b/package.json index d4a4cc9..e53c193 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "scripts": { "build": "remix vite:build", "dev": "remix vite:dev", - "format": "prettier .", + "format": "prettier --write .", "lint": "eslint . .*js --max-warnings 0", "lint:knip": "knip", "lint:md": "markdownlint \"**/*.md\" \".github/**/*.md\" --rules sentences-per-line",