Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .agents/plugins/marketplace.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "allthings",
"interface": {
"displayName": "all things"
"displayName": "allthings"
},
"plugins": [
{
Expand Down
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ CLI_DIR := $(CURRENT_DIR)/cli
.PHONY: list
list:
@echo "${YELLOW}***${RED}***${RESTORE}***${YELLOW}***${RED}***${RESTORE}***${YELLOW}***${RED}***${RESTORE}***${YELLOW}***${RED}***${RESTORE}"
@echo "${RED}All Things Web: ${YELLOW}Available targets${RESTORE}:"
@echo "${RED}allthings: ${YELLOW}Available targets${RESTORE}:"
@grep -E '^[a-zA-Z-]+:.*?## .*$$' Makefile | sort | awk 'BEGIN {FS = ":.*?## "}; {printf " ${YELLOW}%-15s${RESTORE} > %s\n", $$1, $$2}'
@echo "${RED}=================================${RESTORE}"

Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# All Things Web dot Dev
# allthings

---

Expand Down
2 changes: 1 addition & 1 deletion brand/all-things.tokens.json
Original file line number Diff line number Diff line change
Expand Up @@ -725,7 +725,7 @@
"$extensions": {
"dev.allthings": {
"fluid": {
"container": 19.5
"container": 20.3
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion cli/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# allthings

all things from your terminal: what's coming up, who's on stage and how to get in. It reads the same public MCP server agents use, so what you see here is what they see.
allthings from your terminal: what's coming up, who's on stage and how to get in. It reads the same public MCP server agents use, so what you see here is what they see.

```sh
curl -fsSL https://allthingsweb-dev.github.io/allthingsweb/install.bash | bash
Expand Down
2 changes: 1 addition & 1 deletion cli/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "allthings",
"version": "2.0.0-alpha.3",
"description": "all things from your terminal and your agents: the evenings, who is on stage and how to get in.",
"description": "allthings from your terminal and your agents: the evenings, who is on stage and how to get in.",
"type": "module",
"private": true,
"bin": {
Expand Down
2 changes: 1 addition & 1 deletion cli/src/schemas.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { z } from "zod";

/**
* The public all things contract, as served by https://allthings.dev/mcp.
* The public allthings contract, as served by https://allthings.dev/mcp.
* Mirrors app/src/lib/public-api/schemas.ts; a contract test keeps them equal.
*/

Expand Down
2 changes: 1 addition & 1 deletion cli/tests/client.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ describe("MCP client", () => {
content: [
{
type: "text",
text: "all things events are temporarily unavailable.",
text: "allthings events are temporarily unavailable.",
},
],
},
Expand Down
5 changes: 3 additions & 2 deletions cli/tests/fixtures.ts
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,9 @@ export const speaker: Speaker = {
};

export const community: Community = {
name: "All Things Web",
oneLiner: "A hacker club for everyone building the web.",
name: "allthings",
oneLiner:
"Evenings for people who build software. In the neighborhoods of San Francisco.",
introduction: "Intro.",
mission: "Mission.",
history: "History.",
Expand Down
10 changes: 5 additions & 5 deletions core/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ Each phase starts nothing new after its budget, and `pending` is the dry run: it

## Who took part

`event_people` holds a person's part in an event as a whole: an all things
`event_people` holds a person's part in an event as a whole: an allthings
organizer, a co-host or the MC. Who was on stage, and in what capacity, is on
the talks: `talks.format` (a talk, a panel or a fireside chat) and each
speaker's `talk_speakers.role` (speaking or moderating), so a panelist is a
Expand Down Expand Up @@ -364,7 +364,7 @@ DATABASE_URL=… bun run programs # write

## Short links

The lockup is the link (brand/foundations.md, "Name"): all things/effect
The lockup is the link (brand/foundations.md, "Name"): allthings/effect
lives at allthings.dev/effect. `src/short-slugs.ts` is the rule, taking
evenings in the order they start:

Expand All @@ -374,7 +374,7 @@ evenings in the order they start:
2. It takes the first of these that no other evening holds and no page is
at: the base, then the base with its month in San Francisco
(`web-2024-11`), then the day (`web-2024-11-12`), then a count.
3. A shared evening is someone else's, never all things/anything, so its
3. A shared evening is someone else's, never allthings/anything, so its
link is under `shared/` (`shared/typescript-ai-demo-day`). The bare root
is the lockup's alone, and a shared name can't take a topic ours might
want.
Expand Down Expand Up @@ -419,7 +419,7 @@ discriminated type: `{ kind: "ours" }` or `{ kind: "shared", organizer }`.

What follows from it:

- A shared evening is named as written, never all things/<topic>
- A shared evening is named as written, never allthings/<topic>
(`eventTopic`), on its page, in lists, in feeds and on its card.
- /events and home list it in the same rows, marked "shared · by Mastra".
Home's hero is always our next evening, and its photos are of ours.
Expand Down Expand Up @@ -508,7 +508,7 @@ keyless) and, once the X app has a token, X's search, for posts that link
the evening's Luma page or its page on the site, name it, or come from or
mention the people on its stage, from two weeks before it to a week after.
Each post is scored the same way every time (`scoreCandidate`: a link to
the evening, its name, "all things" with its topic, a host, its people,
the evening, its name, "allthings" with its topic, a host, its people,
the night itself), and the ones that score at least 5 are added as
`pending`. Nothing is approved here: an organizer approves or hides each.

Expand Down
2 changes: 1 addition & 1 deletion core/scripts/luma.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import { Readiness } from "../src/readiness/readiness.ts";
* An evening's Luma event, from private draft to public (src/luma/publish.ts),
* with the calendar's key in LUMA_API_KEY and the database at DATABASE_URL:
*
* bun run luma create --name "All Things Effect" --start 2026-11-18T18:00:00-08:00 \
* bun run luma create --name "allthings/effect" --start 2026-11-18T18:00:00-08:00 \
* --end 2026-11-18T21:00:00-08:00 --venue "CodeRabbit, 201 Spear St" [--idea <id>] [--dry-run]
* bun run luma update --event <draft slug> --description-from-drafts [--cover cover.png] [--dry-run]
* bun run luma update --luma evt-… --name "…" before the sync has stored it
Expand Down
2 changes: 1 addition & 1 deletion core/scripts/plan.ts
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,7 @@ const ideaAdd = Command.make(
program: Flag.Literals("program", EventProgram.literals).pipe(
Flag.withDescription("What kind of evening it is."),
),
topic: text("topic", "all things/<topic>, as event topics are written."),
topic: text("topic", "allthings/<topic>, as event topics are written."),
status: literal("status", IdeaStatus.literals, "Where it stands"),
event: text("event", "The draft evening it became, by slug."),
inspiredBy: text("inspired-by", "A past evening it builds on, by slug."),
Expand Down
4 changes: 2 additions & 2 deletions core/src/about.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,15 @@ import * as Rows from "./rows.ts";
import { listingJson } from "./sql.ts";

/**
* What the about page says about all things, read as of the `Clock` in one
* What the about page says about allthings, read as of the `Clock` in one
* statement: how many evenings it has held and who came, where each of the
* names it went by first appeared, and its organizers as their profiles
* have them. Every number is counted from the data, at our published
* evenings that have ended (never ones we only share); nothing is typed in.
*/

/**
* The names the evenings went by before they were all things, oldest
* The names the evenings went by before they were allthings, oldest
* first: brand/foundations.md keeps "All Things Web" as history, and the
* meetups before it are where it began. An evening went by one when its
* name starts with it, as Luma has it.
Expand Down
2 changes: 1 addition & 1 deletion core/src/completeness.ts
Original file line number Diff line number Diff line change
Expand Up @@ -235,7 +235,7 @@ export function eventCompleteness(

const address = event.fullAddress ?? event.streetAddress;
if (address === null || isBlank(address)) gaps.push(gap("venue"));
// A shared evening is named as written, never all things/<topic>.
// A shared evening is named as written, never allthings/<topic>.
if (event.curation.kind === "ours" && eventTopic(event) === undefined) {
gaps.push(gap("topic"));
}
Expand Down
2 changes: 1 addition & 1 deletion core/src/contract.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { Schema } from "effect";

/**
* The public all things contract: the shapes served by the MCP server and the
* The public allthings contract: the shapes served by the MCP server and the
* public API, and consumed by the CLI. These Effect schemas will replace the
* zod ones in app/src/lib/public-api/schemas.ts; until then a contract test
* holds them to the same shapes, the same validation and today's live data.
Expand Down
2 changes: 1 addition & 1 deletion core/src/event-page.ts
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ export interface EventPage {
readonly slug: string;
/** The name as written, without emoji. */
readonly name: string;
/** all things/<topic>: the one the site set, else the name's, if any. */
/** allthings/<topic>: the one the site set, else the name's, if any. */
readonly topic: string | undefined;
/**
* The evening in one line: the organizers' tagline, or the summary of
Expand Down
2 changes: 1 addition & 1 deletion core/src/home.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ export interface Evening {
readonly slug: string;
/** The name as written, without emoji. */
readonly name: string;
/** all things/<topic>: the one the site set, else the name's, if any (see lockup.ts). */
/** allthings/<topic>: the one the site set, else the name's, if any (see lockup.ts). */
readonly topic: string | undefined;
/** At the `Clock`'s now. */
readonly status: Contract.EventStatus;
Expand Down
9 changes: 5 additions & 4 deletions core/src/lockup.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
/**
* Each event is all things/<topic>, and lists write it at/<topic>
* Each event is allthings/<topic>, and lists write it at/<topic>
* (brand/foundations.md, "Name"). An organizer may set the topic on the site
* (`events.topic`); otherwise it is derived from the name, which people write
* on Luma, not the brand, by one fixed rule:
*
* 1. Emoji and other pictographs go, then a trailing "!", "?" or ".".
* 2. A leading "All Things " goes: "All Things Agent Setups" → "Agent Setups".
* 2. A leading name goes, the old way or the new: "All Things Agent Setups"
* → "Agent Setups", "allthings/effect" → "effect".
* 3. A trailing venue goes, since the place is said beside the name:
* "React Bay Area at Mux" → "React Bay Area", "… @ Vercel HQ" likewise.
* 4. A trailing city goes: "Effect San Francisco" → "Effect".
Expand Down Expand Up @@ -74,7 +75,7 @@ export function displayName(name: string): string {
export function topicOf(name: string): string | undefined {
const topic = displayName(name)
.replace(/[!?.]+$/, "")
.replace(/^all things\s+/i, "")
.replace(/^all\s*things(?:\s*\/\s*|\s+|$)/i, "")
.replace(/\s+(?:at|@)\s+.+$/i, "")
.replace(/\s+(?:in\s+)?(?:san francisco|sf)$/i, "")
.trim()
Expand All @@ -85,7 +86,7 @@ export function topicOf(name: string): string | undefined {
/**
* The event's topic: the one the site set (`events.topic`, which the Luma
* sync never writes), else the one its name yields. A shared event has
* none: it is someone else's evening, never all things/anything, so it is
* none: it is someone else's evening, never allthings/anything, so it is
* named as written.
*/
export function eventTopic(event: {
Expand Down
2 changes: 1 addition & 1 deletion core/src/luma/feed.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import { DateTime, Effect, Option, Schema } from "effect";
* app would reject fails here with a {@link LumaFeedError}.
*/

/** The All Things Web calendar; `LUMA_CALENDAR_API_ID` names another. */
/** The allthings calendar; `LUMA_CALENDAR_API_ID` names another. */
export const allThingsWebCalendarId = "cal-3AAimKnRVQEId4r";

/** Dates, and times without a zone of their own, are read in this zone. */
Expand Down
2 changes: 1 addition & 1 deletion core/src/luma/luma.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ export const CalendarId = Schema.String.check(
Schema.isPattern(/^cal-[A-Za-z0-9]+$/),
);

/** The calendar to read: LUMA_CALENDAR_API_ID, or All Things Web's. */
/** The calendar to read: LUMA_CALENDAR_API_ID, or allthings' own. */
export const calendarIdConfig: Config.Config<string> = Config.schema(
CalendarId,
"LUMA_CALENDAR_API_ID",
Expand Down
2 changes: 1 addition & 1 deletion core/src/luma/people.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ import type { LumaEventPeople, LumaHost } from "./api.ts";
* Elizabeth, no accent), so a profile made from every unknown host would be
* wrong or a duplicate as often as not.
*
* A host whose profile is an all things organizer's is the event's
* A host whose profile is an allthings organizer's is the event's
* organizer; everyone else is a co-host. Positions follow Luma's order.
*/

Expand Down
2 changes: 1 addition & 1 deletion core/src/luma/sync.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ import { venueArchive } from "./venue-archive.ts";
* - The site, once the event exists: slug, tagline, attendee limit, and every
* other column and related row (talks, hosts, photos, recording, flags).
* The sync writes slug, tagline and attendee limit for new events only.
* - The site alone: the topic (all things/<topic>, src/lockup.ts) and the
* - The site alone: the topic (allthings/<topic>, src/lockup.ts) and the
* description. The sync never writes them, for new events either: they
* start without them.
* - Luma's API, not the feed: Luma's description and its summary, which
Expand Down
2 changes: 1 addition & 1 deletion core/src/people-directory.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ export interface PartEvening {
readonly curation: "ours" | "shared";
/** The name as written, without emoji. */
readonly name: string;
/** all things/<topic>, by the lockup's rule (see lockup.ts), if any. */
/** allthings/<topic>, by the lockup's rule (see lockup.ts), if any. */
readonly topic: string | undefined;
/** At the `Clock`'s now: an evening still ahead carries the cursor. */
readonly status: Contract.EventStatus;
Expand Down
2 changes: 1 addition & 1 deletion core/src/planning/format.ts
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ export function formatWindow(window: Window): string {
export function formatIdea(idea: Idea): string {
return [
`${idea.title} [${idea.status}] ${idea.id}`,
` ${idea.program}${idea.topic === null ? "" : ` · all things/${idea.topic}`}`,
` ${idea.program}${idea.topic === null ? "" : ` · allthings/${idea.topic}`}`,
` ${idea.pitch}`,
...(idea.event === null ? [] : [` event: ${event(idea.event)}`]),
...(idea.inspiredBy === null
Expand Down
12 changes: 8 additions & 4 deletions core/src/posts/candidates.ts
Original file line number Diff line number Diff line change
Expand Up @@ -144,8 +144,8 @@ export function scoreCandidate(
const named = name.split(/\s+/).length >= 2 && hasPhrase(words, name);
if (named) score += add(4, `names "${name}"`);
// The name, as people write it: "All Things Web", "allthings",
// "#allthingsweb", "all things/effect". "All things <topic>" alone is
// common English ("all things AI"), so it earns less.
// "#allthingsweb", "allthings/effect", "all things/effect". "All things
// <topic>" alone is common English ("all things AI"), so it earns less.
const topicLockup =
signals.topic === null
? null
Expand All @@ -156,7 +156,7 @@ export function scoreCandidate(
if (
/all\s*things\s*web|allthings|#allthingsweb|all\s*things\s*\//i.test(words)
) {
score += add(3, "says all things");
score += add(3, "says allthings");
} else if (topicLockup?.test(words) === true) {
score += add(2, `says "all things ${signals.topic ?? ""}"`);
} else if (signals.topic !== null && hasPhrase(words, signals.topic)) {
Expand Down Expand Up @@ -413,6 +413,9 @@ export const makeBlueskySearch = Effect.gen(function* () {
.map((url) => ({ q: "*", url, sort: "latest" })),
{ q: `"${displayName(signals.name)}"`, ...window },
{ q: `"all things" ${topicWords}`, ...window },
// The one-word name, after the spaced one: a budget keeps the
// spelling most posts so far use.
{ q: `allthings ${topicWords}`, ...window },
...signals.blueskyHandles.flatMap((handle) => [
{ q: topicWords, author: handle, ...window },
{ q: topicWords, mentions: handle, ...window },
Expand Down Expand Up @@ -511,7 +514,7 @@ export function fromXSearch(
});
}

/** X's query for `signals`: the evening's links and name, or its people saying all things. */
/** X's query for `signals`: the evening's links and name, or its people saying allthings. */
export function xQueries(signals: EventSignals): ReadonlyArray<string> {
const quoted = (s: string) => `"${s.replace(/"/g, "")}"`;
const about = [
Expand All @@ -520,6 +523,7 @@ export function xQueries(signals: EventSignals): ReadonlyArray<string> {
].join(" OR ");
const people = signals.xFrom.map((who) => `from:${who}`).join(" OR ");
const words = [
quoted("allthings"),
quoted("all things"),
...(signals.topic === null ? [] : [quoted(signals.topic)]),
].join(" OR ");
Expand Down
6 changes: 3 additions & 3 deletions core/src/promo/drafts.ts
Original file line number Diff line number Diff line change
Expand Up @@ -128,9 +128,9 @@ export function clockOf(instant: DateTime.Utc): string {
return `${twelve}:${String(minute).padStart(2, "0")} ${hour < 12 ? "AM" : "PM"}`;
}

/** "all things/effect", or the name as written when it has no topic. */
/** "allthings/effect", or the name as written when it has no topic. */
export const titleOf = (event: EventPage): string =>
event.topic === undefined ? event.name : `all things/${event.topic}`;
event.topic === undefined ? event.name : `allthings/${event.topic}`;

/** A stored X handle as X spells it, or null when it isn't one. */
export function xHandle(stored: string | null): string | null {
Expand Down Expand Up @@ -672,7 +672,7 @@ function descriptionBody(
rules.length === 0
? null
: rules.map((rule) => `- ${md(rule.text)}`).join("\n"),
`**[all things](${lumaCalendar})**: evenings for people who build software, in the neighborhoods of San Francisco. Talk between evenings → **[discord](${discordInvite})**.`,
`**[allthings](${lumaCalendar})**: evenings for people who build software, in the neighborhoods of San Francisco. Talk between evenings → **[discord](${discordInvite})**.`,
);
}

Expand Down
2 changes: 1 addition & 1 deletion core/src/promo/format.ts
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,7 @@ export function formatLaunch(
: [`## ${title}\n\n${items.map((item) => `${mark}${item}`).join("\n")}`];
return (
[
"# launch: all things",
"# launch: allthings",
...list("gaps", drafts.gaps, "- "),
...list("before posting", drafts.checklist, "- [ ] "),
...sections,
Expand Down
Loading
Loading