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}
-
+
{event.topics.map((topic) => (
- - {topic}
+ -
+ {topic.title}
+ {topic.author && (
+ <>
+ {" "}
+ by{" "}
+ {topic.author.url ? (
+
+ {topic.author.name}
+
+ ) : (
+ topic.author.name
+ )}
+ >
+ )}
+
))}
-
+
{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() {
.
-
+
-
Josh Goldberg
@@ -61,7 +62,7 @@ export default function About() {
-
Hadley Garrett
-
+
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",