0
2
The SvelteKit app lives in web/, as knotless's does
Only what this pull adds. It is built on grain runs on a Rust server modelled on knotless, without hatk.
marketing/capture-og.mjs+2−2
| @@ -3,10 +3,10 @@ import { fileURLToPath } from "url"; | ||
import path from "path"; | ||
| ||
// The share card for pages without an image of their own (home, explore, the | ||
// support pages). Served from static/, so it ships with the app. | ||
// support pages). Served from web/static/, so it ships with the app. | ||
const __dirname = path.dirname(fileURLToPath(import.meta.url)); | ||
const file = "file://" + path.join(__dirname, "og.html"); | ||
const out = path.join(__dirname, "..", "static", "og-default.jpg"); | ||
const out = path.join(__dirname, "..", "web", "static", "og-default.jpg"); | ||
| ||
const browser = await chromium.launch(); | ||
const ctx = await browser.newContext({ viewport: { width: 1200, height: 630 } }); | ||
server/helpers/cameraName.ts+1−1
| @@ -1,4 +1,4 @@ | ||
// Shared with the client so a camera reads the same on a card, on /explore and | ||
// on /cameras. The implementation lives with the app because both sides need | ||
// it; this re-export keeps the server's existing import paths working. | ||
export { cleanCameraName } from "../../app/lib/utils/cameraName.ts"; | ||
export { cleanCameraName } from "../../web/src/lib/utils/cameraName.ts"; | ||
test/galleryDetail.test.ts+1−1
| @@ -2,7 +2,7 @@ | ||
// shared gallery hydrator attaches to each photo. | ||
// | ||
// EXIF numbers are stored scaled by a million, because atproto lexicons have no | ||
// decimal type — the client multiplies on the way in (app/lib/utils/image-resize.ts) | ||
// decimal type — the client multiplies on the way in (web/src/lib/utils/image-resize.ts) | ||
// and the hydrator divides on the way out. ISO is scaled too, despite being a | ||
// whole number already. What a reader wants is "1/250s" and "f/2.8", so the | ||
// formatting is where the meaning is. | ||
test/resolveRouteActor.test.ts+2−2
| @@ -25,8 +25,8 @@ vi.mock("../hatk.generated.client.ts", () => ({ | ||
}, | ||
})); | ||
| ||
const { resolveRouteActor } = await import("../app/lib/actor.ts"); | ||
const { actorProfileQuery } = await import("../app/lib/queries.ts"); | ||
const { resolveRouteActor } = await import("../web/src/lib/actor.ts"); | ||
const { actorProfileQuery } = await import("../web/src/lib/queries.ts"); | ||
| ||
const profileIn = (qc: QueryClient, actor: string) => | ||
qc.getQueryData(actorProfileQuery(actor).queryKey) as any; | ||
test/storyViews.test.ts+4−3
| @@ -16,13 +16,14 @@ vi.mock("../hatk.generated.client.ts", () => ({ | ||
}, | ||
})); | ||
| ||
vi.mock("../app/lib/stores.ts", async () => { | ||
vi.mock("../web/src/lib/stores.ts", async () => { | ||
const { writable } = await import("svelte/store"); | ||
return { viewer: writable<{ did: string } | null>({ did: "did:plc:me" }) }; | ||
}); | ||
| ||
const { isCaughtUp, firstUnviewedIndex, markStoriesViewed } = await import("../app/lib/stories.ts"); | ||
const { viewer } = await import("../app/lib/stores.ts"); | ||
const { isCaughtUp, firstUnviewedIndex, markStoriesViewed } = | ||
await import("../web/src/lib/stories.ts"); | ||
const { viewer } = await import("../web/src/lib/stores.ts"); | ||
| ||
const ALICE = "did:plc:alice"; | ||
const story = (id: string, createdAt: string, viewed?: boolean) => | ||
test/tid.test.ts+1−1
| @@ -1,5 +1,5 @@ | ||
import { describe, expect, test } from "vitest"; | ||
import { encodeTid, nextTid } from "../app/lib/utils/tid.ts"; | ||
import { encodeTid, nextTid } from "../web/src/lib/utils/tid.ts"; | ||
| ||
/** Regex from the AT Protocol TID syntax: 13 base32-sortable chars, top bit clear. */ | ||
const TID_RE = /^[234567abcdefghij][234567abcdefghijklmnopqrstuvwxyz]{12}$/; | ||
app/lib/actions/infinite-scroll.ts → web/src/lib/actions/infinite-scroll.tsrenamed+0−0
Moved without changes.
app/lib/components/atoms/Avatar.svelte → web/src/lib/components/atoms/Avatar.svelterenamed+0−0
Moved without changes.
app/lib/components/atoms/AvatarLightbox.svelte → web/src/lib/components/atoms/AvatarLightbox.svelterenamed+0−0
Moved without changes.
app/lib/components/atoms/BskyIcon.svelte → web/src/lib/components/atoms/BskyIcon.svelterenamed+0−0
Moved without changes.
app/lib/components/atoms/Button.svelte → web/src/lib/components/atoms/Button.svelterenamed+0−0
Moved without changes.
app/lib/components/atoms/Checkbox.svelte → web/src/lib/components/atoms/Checkbox.svelterenamed+0−0
Moved without changes.
app/lib/components/atoms/ContentWarningPicker.svelte → web/src/lib/components/atoms/ContentWarningPicker.svelterenamed+0−0
Moved without changes.
app/lib/components/atoms/ExifInfo.svelte → web/src/lib/components/atoms/ExifInfo.svelterenamed+0−0
Moved without changes.
app/lib/components/atoms/Facepile.svelte → web/src/lib/components/atoms/Facepile.svelterenamed+0−0
Moved without changes.
app/lib/components/atoms/Field.svelte → web/src/lib/components/atoms/Field.svelterenamed+0−0
Moved without changes.
app/lib/components/atoms/FileDropZone.svelte → web/src/lib/components/atoms/FileDropZone.svelterenamed+0−0
Moved without changes.
app/lib/components/atoms/Input.svelte → web/src/lib/components/atoms/Input.svelterenamed+0−0
Moved without changes.
app/lib/components/atoms/LocationInput.svelte → web/src/lib/components/atoms/LocationInput.svelterenamed+0−0
Moved without changes.
app/lib/components/atoms/LocationMapBanner.svelte → web/src/lib/components/atoms/LocationMapBanner.svelterenamed+0−0
Moved without changes.
app/lib/components/atoms/Modal.svelte → web/src/lib/components/atoms/Modal.svelterenamed+0−0
Moved without changes.
app/lib/components/atoms/NotificationItem.svelte → web/src/lib/components/atoms/NotificationItem.svelterenamed+0−0
Moved without changes.
app/lib/components/atoms/OGMeta.svelte → web/src/lib/components/atoms/OGMeta.svelterenamed+0−0
Moved without changes.
app/lib/components/atoms/OverflowMenu.svelte → web/src/lib/components/atoms/OverflowMenu.svelterenamed+0−0
Moved without changes.
app/lib/components/atoms/PinButton.svelte → web/src/lib/components/atoms/PinButton.svelterenamed+0−0
Moved without changes.
app/lib/components/atoms/RichText.svelte → web/src/lib/components/atoms/RichText.svelterenamed+0−0
Moved without changes.
app/lib/components/atoms/RichTextarea.svelte → web/src/lib/components/atoms/RichTextarea.svelterenamed+0−0
Moved without changes.
app/lib/components/atoms/SelectCheck.svelte → web/src/lib/components/atoms/SelectCheck.svelterenamed+0−0
Moved without changes.
app/lib/components/atoms/SettingsGroup.svelte → web/src/lib/components/atoms/SettingsGroup.svelterenamed+0−0
Moved without changes.
app/lib/components/atoms/SettingsToggleRow.svelte → web/src/lib/components/atoms/SettingsToggleRow.svelterenamed+0−0
Moved without changes.
app/lib/components/atoms/Skeleton.svelte → web/src/lib/components/atoms/Skeleton.svelterenamed+0−0
Moved without changes.
app/lib/components/atoms/Spinner.svelte → web/src/lib/components/atoms/Spinner.svelterenamed+0−0
Moved without changes.
app/lib/components/atoms/Textarea.svelte → web/src/lib/components/atoms/Textarea.svelterenamed+0−0
Moved without changes.
app/lib/components/atoms/Toast.svelte → web/src/lib/components/atoms/Toast.svelterenamed+0−0
Moved without changes.
app/lib/components/molecules/AvatarCrop.svelte → web/src/lib/components/molecules/AvatarCrop.svelterenamed+0−0
Moved without changes.
app/lib/components/molecules/BrowseTile.svelte → web/src/lib/components/molecules/BrowseTile.svelterenamed+0−0
Moved without changes.
app/lib/components/molecules/Comment.svelte → web/src/lib/components/molecules/Comment.svelterenamed+0−0
Moved without changes.
app/lib/components/molecules/DetailHeader.svelte → web/src/lib/components/molecules/DetailHeader.svelterenamed+0−0
Moved without changes.
app/lib/components/molecules/FavedByFollowing.svelte → web/src/lib/components/molecules/FavedByFollowing.svelterenamed+0−0
Moved without changes.
app/lib/components/molecules/FavoriteButton.svelte → web/src/lib/components/molecules/FavoriteButton.svelterenamed+0−0
Moved without changes.
app/lib/components/molecules/FeedTabs.svelte → web/src/lib/components/molecules/FeedTabs.svelterenamed+0−0
Moved without changes.
app/lib/components/molecules/FollowButton.svelte → web/src/lib/components/molecules/FollowButton.svelterenamed+0−0
Moved without changes.
app/lib/components/molecules/GalleryCard.svelte → web/src/lib/components/molecules/GalleryCard.svelterenamed+0−0
Moved without changes.
app/lib/components/molecules/GalleryCardSkeleton.svelte → web/src/lib/components/molecules/GalleryCardSkeleton.svelterenamed+0−0
Moved without changes.
app/lib/components/molecules/GalleryMedia.svelte → web/src/lib/components/molecules/GalleryMedia.svelterenamed+0−0
Moved without changes.
app/lib/components/molecules/GalleryMenu.svelte → web/src/lib/components/molecules/GalleryMenu.svelterenamed+0−0
Moved without changes.
app/lib/components/molecules/GallerySectionRow.svelte → web/src/lib/components/molecules/GallerySectionRow.svelterenamed+0−0
Moved without changes.
app/lib/components/molecules/IosAppBanner.svelte → web/src/lib/components/molecules/IosAppBanner.svelterenamed+0−0
Moved without changes.
app/lib/components/molecules/LocationsMap.svelte → web/src/lib/components/molecules/LocationsMap.svelterenamed+0−0
Moved without changes.
app/lib/components/molecules/MobileBottomBar.svelte → web/src/lib/components/molecules/MobileBottomBar.svelterenamed+0−0
Moved without changes.
app/lib/components/molecules/MobileTopBar.svelte → web/src/lib/components/molecules/MobileTopBar.svelterenamed+0−0
Moved without changes.
app/lib/components/molecules/PageHeading.svelte → web/src/lib/components/molecules/PageHeading.svelterenamed+0−0
Moved without changes.
app/lib/components/molecules/ProfileCard.svelte → web/src/lib/components/molecules/ProfileCard.svelterenamed+0−0
Moved without changes.
app/lib/components/molecules/ProfilePopover.svelte → web/src/lib/components/molecules/ProfilePopover.svelterenamed+0−0
Moved without changes.
app/lib/components/molecules/PublicTopBar.svelte → web/src/lib/components/molecules/PublicTopBar.svelterenamed+0−0
Moved without changes.
app/lib/components/molecules/PullToRefresh.svelte → web/src/lib/components/molecules/PullToRefresh.svelterenamed+0−0
Moved without changes.
app/lib/components/molecules/ReportButton.svelte → web/src/lib/components/molecules/ReportButton.svelterenamed+0−0
Moved without changes.
app/lib/components/molecules/SpacesRequired.svelte → web/src/lib/components/molecules/SpacesRequired.svelterenamed+0−0
Moved without changes.
app/lib/components/molecules/StoryArchive.svelte → web/src/lib/components/molecules/StoryArchive.svelterenamed+0−0
Moved without changes.
app/lib/components/molecules/StoryCreate.svelte → web/src/lib/components/molecules/StoryCreate.svelterenamed+0−0
Moved without changes.
app/lib/components/molecules/StoryStrip.svelte → web/src/lib/components/molecules/StoryStrip.svelterenamed+0−0
Moved without changes.
app/lib/components/organisms/AuthBar.svelte → web/src/lib/components/organisms/AuthBar.svelterenamed+0−0
Moved without changes.
app/lib/components/organisms/CommentSheet.svelte → web/src/lib/components/organisms/CommentSheet.svelterenamed+0−0
Moved without changes.
app/lib/components/organisms/FeedList.svelte → web/src/lib/components/organisms/FeedList.svelterenamed+0−0
Moved without changes.
app/lib/components/organisms/GalleryGrid.svelte → web/src/lib/components/organisms/GalleryGrid.svelterenamed+0−0
Moved without changes.
app/lib/components/organisms/LoginModal.svelte → web/src/lib/components/organisms/LoginModal.svelterenamed+0−0
Moved without changes.
app/lib/components/organisms/LoginWall.svelte → web/src/lib/components/organisms/LoginWall.svelterenamed+0−0
Moved without changes.
app/lib/components/organisms/MobileDrawer.svelte → web/src/lib/components/organisms/MobileDrawer.svelterenamed+0−0
Moved without changes.
app/lib/components/organisms/MobileSearch.svelte → web/src/lib/components/organisms/MobileSearch.svelterenamed+0−0
Moved without changes.
app/lib/components/organisms/SearchFlyout.svelte → web/src/lib/components/organisms/SearchFlyout.svelterenamed+0−0
Moved without changes.
app/lib/components/organisms/Sidebar.svelte → web/src/lib/components/organisms/Sidebar.svelterenamed+0−0
Moved without changes.
app/lib/components/organisms/StoryViewer.svelte → web/src/lib/components/organisms/StoryViewer.svelterenamed+0−0
Moved without changes.
app/lib/components/organisms/SuggestedFollows.svelte → web/src/lib/components/organisms/SuggestedFollows.svelterenamed+0−0
Moved without changes.
app/lib/components/templates/Shell.svelte → web/src/lib/components/templates/Shell.svelterenamed+0−0
Moved without changes.
app/lib/utils/bsky-post.ts → web/src/lib/utils/bsky-post.tsrenamed+0−0
Moved without changes.
app/lib/utils/cameraName.ts → web/src/lib/utils/cameraName.tsrenamed+0−0
Moved without changes.
app/lib/utils/formatLocation.ts → web/src/lib/utils/formatLocation.tsrenamed+1−1
| @@ -1,4 +1,4 @@ | ||
// Re-export of the server-owned formatter so client-side callers (UI, cross-post | ||
// builder) import it via `$lib` without reaching into `server/`. The function | ||
// itself is pure and lives in `server/helpers/formatLocation.ts`. | ||
export { formatStoredLocation } from "../../../server/helpers/formatLocation.ts"; | ||
export { formatStoredLocation } from "../../../../server/helpers/formatLocation.ts"; | ||
app/lib/utils/h3.ts → web/src/lib/utils/h3.tsrenamed+0−0
Moved without changes.
app/lib/utils/image-resize.ts → web/src/lib/utils/image-resize.tsrenamed+0−0
Moved without changes.
app/lib/utils/instagram-import.ts → web/src/lib/utils/instagram-import.tsrenamed+0−0
Moved without changes.
app/lib/utils/nominatim.ts → web/src/lib/utils/nominatim.tsrenamed+0−0
Moved without changes.
app/lib/utils/records.ts → web/src/lib/utils/records.tsrenamed+0−0
Moved without changes.
app/lib/utils/rich-text.ts → web/src/lib/utils/rich-text.tsrenamed+0−0
Moved without changes.
app/lib/utils/tid.ts → web/src/lib/utils/tid.tsrenamed+0−0
Moved without changes.
app/lib/accounts.ts → web/src/lib/accounts.tsrenamed+0−0
Moved without changes.
app/lib/actor.ts → web/src/lib/actor.tsrenamed+0−0
Moved without changes.
app/lib/auth.ts → web/src/lib/auth.tsrenamed+0−0
Moved without changes.
app/lib/basemap.ts → web/src/lib/basemap.tsrenamed+0−0
Moved without changes.
app/lib/feed.ts → web/src/lib/feed.tsrenamed+0−0
Moved without changes.
app/lib/labels.ts → web/src/lib/labels.tsrenamed+0−0
Moved without changes.
app/lib/mutations.ts → web/src/lib/mutations.tsrenamed+0−0
Moved without changes.
app/lib/notifications.ts → web/src/lib/notifications.tsrenamed+0−0
Moved without changes.
app/lib/preferences.ts → web/src/lib/preferences.tsrenamed+0−0
Moved without changes.
app/lib/queries.ts → web/src/lib/queries.tsrenamed+0−0
Moved without changes.
app/lib/seo.ts → web/src/lib/seo.tsrenamed+0−0
Moved without changes.
app/lib/sitemap.ts → web/src/lib/sitemap.tsrenamed+0−0
Moved without changes.
app/lib/spaceBlob.ts → web/src/lib/spaceBlob.tsrenamed+0−0
Moved without changes.
app/lib/stores.ts → web/src/lib/stores.tsrenamed+0−0
Moved without changes.
app/lib/stories.ts → web/src/lib/stories.tsrenamed+0−0
Moved without changes.
app/lib/theme.ts → web/src/lib/theme.tsrenamed+0−0
Moved without changes.
app/lib/utils.ts → web/src/lib/utils.tsrenamed+0−0
Moved without changes.
app/routes/.well-known/apple-app-site-association/+server.ts → web/src/routes/.well-known/apple-app-site-association/+server.tsrenamed+0−0
Moved without changes.
app/routes/.well-known/did.json/+server.ts → web/src/routes/.well-known/did.json/+server.tsrenamed+0−0
Moved without changes.
app/routes/camera/[name]/+page.svelte → web/src/routes/camera/[name]/+page.svelterenamed+0−0
Moved without changes.
app/routes/camera/[name]/+page.ts → web/src/routes/camera/[name]/+page.tsrenamed+0−0
Moved without changes.
app/routes/cameras/+page.svelte → web/src/routes/cameras/+page.svelterenamed+0−0
Moved without changes.
app/routes/cameras/+page.ts → web/src/routes/cameras/+page.tsrenamed+0−0
Moved without changes.
app/routes/create/+page.server.ts → web/src/routes/create/+page.server.tsrenamed+0−0
Moved without changes.
app/routes/create/+page.svelte → web/src/routes/create/+page.svelterenamed+0−0
Moved without changes.
app/routes/embed/gallery/[actor]/[rkey]/+server.ts → web/src/routes/embed/gallery/[actor]/[rkey]/+server.tsrenamed+0−0
Moved without changes.
app/routes/explore/+page.svelte → web/src/routes/explore/+page.svelterenamed+0−0
Moved without changes.
app/routes/explore/+page.ts → web/src/routes/explore/+page.tsrenamed+0−0
Moved without changes.
app/routes/feeds/following/+page.svelte → web/src/routes/feeds/following/+page.svelterenamed+0−0
Moved without changes.
app/routes/feeds/following/+page.ts → web/src/routes/feeds/following/+page.tsrenamed+0−0
Moved without changes.
app/routes/feeds/for-you/+page.svelte → web/src/routes/feeds/for-you/+page.svelterenamed+0−0
Moved without changes.
app/routes/feeds/for-you/+page.ts → web/src/routes/feeds/for-you/+page.tsrenamed+0−0
Moved without changes.
app/routes/feeds/groups/+page.svelte → web/src/routes/feeds/groups/+page.svelterenamed+0−0
Moved without changes.
app/routes/feeds/recent/+page.svelte → web/src/routes/feeds/recent/+page.svelterenamed+0−0
Moved without changes.
app/routes/feeds/+page.svelte → web/src/routes/feeds/+page.svelterenamed+0−0
Moved without changes.
app/routes/group/[did]/create/+page.svelte → web/src/routes/group/[did]/create/+page.svelterenamed+0−0
Moved without changes.
app/routes/group/[did]/+page.svelte → web/src/routes/group/[did]/+page.svelterenamed+0−0
Moved without changes.
app/routes/group/[did]/+page.ts → web/src/routes/group/[did]/+page.tsrenamed+0−0
Moved without changes.
app/routes/groups/new/+page.svelte → web/src/routes/groups/new/+page.svelterenamed+0−0
Moved without changes.
app/routes/groups/+page.svelte → web/src/routes/groups/+page.svelterenamed+0−0
Moved without changes.
app/routes/groups/+page.ts → web/src/routes/groups/+page.tsrenamed+0−0
Moved without changes.
app/routes/hashtags/[tag]/+page.svelte → web/src/routes/hashtags/[tag]/+page.svelterenamed+0−0
Moved without changes.
app/routes/hashtags/[tag]/+page.ts → web/src/routes/hashtags/[tag]/+page.tsrenamed+0−0
Moved without changes.
app/routes/location/[h3]/+page.svelte → web/src/routes/location/[h3]/+page.svelterenamed+0−0
Moved without changes.
app/routes/location/[h3]/+page.ts → web/src/routes/location/[h3]/+page.tsrenamed+0−0
Moved without changes.
app/routes/locations/+page.svelte → web/src/routes/locations/+page.svelterenamed+0−0
Moved without changes.
app/routes/locations/+page.ts → web/src/routes/locations/+page.tsrenamed+0−0
Moved without changes.
app/routes/notifications/+page.svelte → web/src/routes/notifications/+page.svelterenamed+0−0
Moved without changes.
app/routes/oauth/callback/+page.svelte → web/src/routes/oauth/callback/+page.svelterenamed+0−0
Moved without changes.
app/routes/private/[authority]/[skey]/+page.svelte → web/src/routes/private/[authority]/[skey]/+page.svelterenamed+0−0
Moved without changes.
app/routes/private/create/+page.svelte → web/src/routes/private/create/+page.svelterenamed+0−0
Moved without changes.
app/routes/profile/[actor]/followers/+page.svelte → web/src/routes/profile/[actor]/followers/+page.svelterenamed+0−0
Moved without changes.
app/routes/profile/[actor]/followers/+page.ts → web/src/routes/profile/[actor]/followers/+page.tsrenamed+0−0
Moved without changes.
app/routes/profile/[actor]/following/+page.svelte → web/src/routes/profile/[actor]/following/+page.svelterenamed+0−0
Moved without changes.
app/routes/profile/[actor]/following/+page.ts → web/src/routes/profile/[actor]/following/+page.tsrenamed+0−0
Moved without changes.
app/routes/profile/[actor]/gallery/[rkey]/edit/+page.svelte → web/src/routes/profile/[actor]/gallery/[rkey]/edit/+page.svelterenamed+0−0
Moved without changes.
app/routes/profile/[actor]/gallery/[rkey]/edit/+page.ts → web/src/routes/profile/[actor]/gallery/[rkey]/edit/+page.tsrenamed+0−0
Moved without changes.
app/routes/profile/[actor]/gallery/[rkey]/favorited-by/+page.svelte → web/src/routes/profile/[actor]/gallery/[rkey]/favorited-by/+page.svelterenamed+0−0
Moved without changes.
app/routes/profile/[actor]/gallery/[rkey]/favorited-by/+page.ts → web/src/routes/profile/[actor]/gallery/[rkey]/favorited-by/+page.tsrenamed+0−0
Moved without changes.
app/routes/profile/[actor]/gallery/[rkey]/+page.svelte → web/src/routes/profile/[actor]/gallery/[rkey]/+page.svelterenamed+0−0
Moved without changes.
app/routes/profile/[actor]/gallery/[rkey]/+page.ts → web/src/routes/profile/[actor]/gallery/[rkey]/+page.tsrenamed+0−0
Moved without changes.
app/routes/profile/[actor]/known-followers/+page.svelte → web/src/routes/profile/[actor]/known-followers/+page.svelterenamed+0−0
Moved without changes.
app/routes/profile/[actor]/known-followers/+page.ts → web/src/routes/profile/[actor]/known-followers/+page.tsrenamed+0−0
Moved without changes.
app/routes/profile/[actor]/story/[rkey]/+page.svelte → web/src/routes/profile/[actor]/story/[rkey]/+page.svelterenamed+0−0
Moved without changes.
app/routes/profile/[actor]/story/[rkey]/+page.ts → web/src/routes/profile/[actor]/story/[rkey]/+page.tsrenamed+0−0
Moved without changes.
app/routes/profile/[actor]/+page.svelte → web/src/routes/profile/[actor]/+page.svelterenamed+0−0
Moved without changes.
app/routes/profile/[actor]/+page.ts → web/src/routes/profile/[actor]/+page.tsrenamed+0−0
Moved without changes.
app/routes/search/+page.svelte → web/src/routes/search/+page.svelterenamed+0−0
Moved without changes.
app/routes/settings/account/+page.svelte → web/src/routes/settings/account/+page.svelterenamed+0−0
Moved without changes.
app/routes/settings/appearance/+page.svelte → web/src/routes/settings/appearance/+page.svelterenamed+0−0
Moved without changes.
app/routes/settings/import/+page.svelte → web/src/routes/settings/import/+page.svelterenamed+0−0
Moved without changes.
app/routes/settings/moderation/blocked/+page.svelte → web/src/routes/settings/moderation/blocked/+page.svelterenamed+0−0
Moved without changes.
app/routes/settings/moderation/muted/+page.svelte → web/src/routes/settings/moderation/muted/+page.svelterenamed+0−0
Moved without changes.
app/routes/settings/moderation/+page.svelte → web/src/routes/settings/moderation/+page.svelterenamed+0−0
Moved without changes.
app/routes/settings/notifications/+page.svelte → web/src/routes/settings/notifications/+page.svelterenamed+0−0
Moved without changes.
app/routes/settings/profile/+page.svelte → web/src/routes/settings/profile/+page.svelterenamed+0−0
Moved without changes.
app/routes/settings/profile/+page.ts → web/src/routes/settings/profile/+page.tsrenamed+0−0
Moved without changes.
app/routes/settings/upload-defaults/+page.svelte → web/src/routes/settings/upload-defaults/+page.svelterenamed+0−0
Moved without changes.
app/routes/settings/+layout.server.ts → web/src/routes/settings/+layout.server.tsrenamed+0−0
Moved without changes.
app/routes/settings/+layout.svelte → web/src/routes/settings/+layout.svelterenamed+0−0
Moved without changes.
app/routes/settings/+layout.ts → web/src/routes/settings/+layout.tsrenamed+0−0
Moved without changes.
app/routes/settings/+page.svelte → web/src/routes/settings/+page.svelterenamed+0−0
Moved without changes.
app/routes/sitemap/[kind]-[page].xml/+server.ts → web/src/routes/sitemap/[kind]-[page].xml/+server.tsrenamed+0−0
Moved without changes.
app/routes/sitemap.xml/+server.ts → web/src/routes/sitemap.xml/+server.tsrenamed+0−0
Moved without changes.
app/routes/support/child-safety/+page.svelte → web/src/routes/support/child-safety/+page.svelterenamed+0−0
Moved without changes.
app/routes/support/community-guidelines/+page.svelte → web/src/routes/support/community-guidelines/+page.svelterenamed+0−0
Moved without changes.
app/routes/support/copyright/+page.svelte → web/src/routes/support/copyright/+page.svelterenamed+0−0
Moved without changes.
app/routes/support/privacy/+page.svelte → web/src/routes/support/privacy/+page.svelterenamed+0−0
Moved without changes.
app/routes/support/terms/+page.svelte → web/src/routes/support/terms/+page.svelterenamed+0−0
Moved without changes.
app/routes/+error.svelte → web/src/routes/+error.svelterenamed+0−0
Moved without changes.
app/routes/+layout.server.ts → web/src/routes/+layout.server.tsrenamed+0−0
Moved without changes.
app/routes/+layout.svelte → web/src/routes/+layout.svelterenamed+0−0
Moved without changes.
app/routes/+layout.ts → web/src/routes/+layout.tsrenamed+0−0
Moved without changes.
app/routes/+page.svelte → web/src/routes/+page.svelterenamed+0−0
Moved without changes.
app/routes/+page.ts → web/src/routes/+page.tsrenamed+0−0
Moved without changes.
app/app.css → web/src/app.cssrenamed+0−0
Moved without changes.
app/app.html → web/src/app.htmlrenamed+0−0
Moved without changes.
app/error.html → web/src/error.htmlrenamed+0−0
Moved without changes.
app/service-worker.js → web/src/service-worker.jsrenamed+0−0
Moved without changes.
static/atmo/atmo-anisota.jpg → web/static/atmo/atmo-anisota.jpgrenamed+0−0
Moved without changes.
static/atmo/atmo-beacon-bits.jpg → web/static/atmo/atmo-beacon-bits.jpgrenamed+0−0
Moved without changes.
static/atmo/atmo-blacksky.jpg → web/static/atmo/atmo-blacksky.jpgrenamed+0−0
Moved without changes.
static/atmo/atmo-blento.jpg → web/static/atmo/atmo-blento.jpgrenamed+0−0
Moved without changes.
static/atmo/atmo-bluesky.jpg → web/static/atmo/atmo-bluesky.jpgrenamed+0−0
Moved without changes.
static/atmo/atmo-eurosky.jpg → web/static/atmo/atmo-eurosky.jpgrenamed+0−0
Moved without changes.
static/atmo/atmo-flashes.jpg → web/static/atmo/atmo-flashes.jpgrenamed+0−0
Moved without changes.
static/atmo/atmo-gander.jpg → web/static/atmo/atmo-gander.jpgrenamed+0−0
Moved without changes.
static/atmo/atmo-germ.jpg → web/static/atmo/atmo-germ.jpgrenamed+0−0
Moved without changes.
static/atmo/atmo-leaflet.jpg → web/static/atmo/atmo-leaflet.jpgrenamed+0−0
Moved without changes.
static/atmo/atmo-northsky.jpg → web/static/atmo/atmo-northsky.jpgrenamed+0−0
Moved without changes.
static/atmo/atmo-offprint.jpg → web/static/atmo/atmo-offprint.jpgrenamed+0−0
Moved without changes.
static/atmo/atmo-pckt.jpg → web/static/atmo/atmo-pckt.jpgrenamed+0−0
Moved without changes.
static/atmo/atmo-plyr.jpg → web/static/atmo/atmo-plyr.jpgrenamed+0−0
Moved without changes.
static/atmo/atmo-popfeed.jpg → web/static/atmo/atmo-popfeed.jpgrenamed+0−0
Moved without changes.
static/atmo/atmo-semble.jpg → web/static/atmo/atmo-semble.jpgrenamed+0−0
Moved without changes.
static/atmo/atmo-skylight.jpg → web/static/atmo/atmo-skylight.jpgrenamed+0−0
Moved without changes.
static/atmo/atmo-slices.jpg → web/static/atmo/atmo-slices.jpgrenamed+0−0
Moved without changes.
static/atmo/atmo-spark.png → web/static/atmo/atmo-spark.pngrenamed+0−0
Moved without changes.
static/atmo/atmo-stream-place.jpg → web/static/atmo/atmo-stream-place.jpgrenamed+0−0
Moved without changes.
static/atmo/atmo-tangled.jpg → web/static/atmo/atmo-tangled.jpgrenamed+0−0
Moved without changes.
static/favicon.png → web/static/favicon.pngrenamed+0−0
Moved without changes.
static/germ-logo.png → web/static/germ-logo.pngrenamed+0−0
Moved without changes.
static/icon-192.png → web/static/icon-192.pngrenamed+0−0
Moved without changes.
static/icon-512.png → web/static/icon-512.pngrenamed+0−0
Moved without changes.
static/manifest.json → web/static/manifest.jsonrenamed+0−0
Moved without changes.
static/og-default.jpg → web/static/og-default.jpgrenamed+0−0
Moved without changes.
static/robots.txt → web/static/robots.txtrenamed+0−0
Moved without changes.
AGENTS.md+1−2
| @@ -46,10 +46,9 @@ knotless: one pull into it per step of the plan. | ||
| ----------- | ----------------------------------------------------------------------------------- | | ||
| `lexicons/` | AT Protocol lexicon schemas (JSON). Defines collections and XRPC methods | | ||
| `server/` | All server-side code: feeds, XRPC handlers, hooks, labels, OG routes, setup scripts | | ||
| `app/` | SvelteKit frontend (routes, components, styles) | | ||
| `web/` | SvelteKit frontend: `web/src` (routes, components, styles), `web/static` (assets) | | ||
| `seeds/` | Test data seeding scripts for local development | | ||
| `test/` | Test files (vitest). Run with `vp test` | | ||
| `public/` | Static files served at the root | | ||
| ||
## Key files | ||
| ||
hatk.config.ts+2−2
| @@ -148,8 +148,8 @@ const poolScopes = `${poolWriteScope} space:social.grain.group?authority=*&skey= | ||
| ||
export default defineConfig({ | ||
// hatk answers /robots.txt itself, ahead of SvelteKit, from this directory. | ||
// Pointed at SvelteKit's static/ so the file lives with the other assets. | ||
publicDir: "./static", | ||
// Pointed at SvelteKit's web/static/ so the file lives with the other assets. | ||
publicDir: "./web/static", | ||
relay: isProd ? "wss://bsky.network" : "ws://localhost:2583", | ||
// Jetstream filters server-side, so we stop decoding the whole network to | ||
// find social.grain.*. Prod only — the local PDS has no Jetstream in front | ||
README.md+1−1
| @@ -20,7 +20,7 @@ Opens at `http://127.0.0.1:3000` with a local PDS, firehose relay, and SvelteKit | ||
| ----------- | ------------------------------------------ | | ||
| `lexicons/` | AT Protocol lexicon schemas | | ||
| `server/` | Feeds, XRPC handlers, hooks, setup scripts | | ||
| `app/` | SvelteKit frontend | | ||
| `web/` | SvelteKit frontend | | ||
| `seeds/` | Test data for local dev | | ||
| ||
See `AGENTS.md` for detailed development docs. | ||