SYMBOL INDEX (115 symbols across 16 files) FILE: astro.config.mjs function rawFonts (line 17) | function rawFonts(extensions) { FILE: src/components/BlackHole/index.tsx class SeededRNG (line 7) | class SeededRNG { method constructor (line 10) | constructor(seed: number) { method next (line 15) | next() { function generateStarTexture (line 22) | function generateStarTexture(seed: number, size: number = 1024): THREE.D... function BlackHoleShader (line 71) | function BlackHoleShader({ seed, iterations }: { seed: number; iteration... function BlackHole (line 133) | function BlackHole({ seed = 404 }: { seed?: number }) { FILE: src/components/Bluesky/index.tsx type NormalizedImage (line 5) | interface NormalizedImage { type NormalizedVideo (line 14) | interface NormalizedVideo { type NormalizedExternal (line 22) | interface NormalizedExternal { type NormalizedQuote (line 30) | interface NormalizedQuote { type NormalizedEmbed (line 36) | type NormalizedEmbed = type BlueskyPost (line 42) | interface BlueskyPost { function formatDate (line 51) | function formatDate(dateString: string): string { function ImageEmbed (line 71) | function ImageEmbed({ embed }: { embed: NormalizedImage }) { function VideoEmbed (line 84) | function VideoEmbed({ embed }: { embed: NormalizedVideo }) { function ExternalEmbed (line 96) | function ExternalEmbed({ embed }: { embed: NormalizedExternal }) { function QuoteEmbed (line 121) | function QuoteEmbed({ embed }: { embed: NormalizedQuote }) { function EmbedRenderer (line 139) | function EmbedRenderer({ embed }: { embed: NormalizedEmbed }) { function PostCard (line 154) | function PostCard({ post }: { post: BlueskyPost }) { type BlueskyFeedProps (line 192) | interface BlueskyFeedProps { function BlueskyFeed (line 196) | function BlueskyFeed({ limit = 10 }: BlueskyFeedProps) { FILE: src/components/Farcaster/index.tsx type NormalizedEmbed (line 4) | interface NormalizedEmbed { type FarcasterPost (line 11) | interface FarcasterPost { function formatDate (line 19) | function formatDate(dateString: string): string { function isImageUrl (line 39) | function isImageUrl(url: string): boolean { function UrlEmbed (line 43) | function UrlEmbed({ url }: { url: string }) { function PostCard (line 59) | function PostCard({ post }: { post: FarcasterPost }) { type FarcasterFeedProps (line 104) | interface FarcasterFeedProps { function FarcasterFeed (line 109) | function FarcasterFeed({ limit = 10, onDataLoaded }: FarcasterFeedProps) { FILE: src/components/OnchainAnalytics/index.tsx type PageView (line 45) | interface PageView { type Event (line 50) | interface Event { type OnchainAnalyticsProps (line 55) | interface OnchainAnalyticsProps { function OnchainAnalytics (line 59) | function OnchainAnalytics({ contractAddress }: OnchainAnalyticsProps) { FILE: src/components/RecentGlass/index.tsx type GlassExif (line 5) | interface GlassExif { type GlassPhoto (line 14) | interface GlassPhoto { function RecentGlass (line 25) | function RecentGlass() { FILE: src/components/SocialFeeds/index.tsx type BasePost (line 5) | interface BasePost { type TextPost (line 10) | interface TextPost extends BasePost { type BlueskyImage (line 15) | interface BlueskyImage { type BlueskyVideo (line 23) | interface BlueskyVideo { type BlueskyExternal (line 29) | interface BlueskyExternal { type BlueskyQuote (line 37) | interface BlueskyQuote { type BlueskyEmbed (line 43) | type BlueskyEmbed = type BlueskyPost (line 49) | interface BlueskyPost extends TextPost { type FarcasterEmbed (line 56) | interface FarcasterEmbed { type FarcasterPost (line 63) | interface FarcasterPost extends TextPost { type GlassExif (line 69) | interface GlassExif { type GlassPost (line 78) | interface GlassPost extends BasePost { constant STALE_THRESHOLD_MS (line 89) | const STALE_THRESHOLD_MS = 5 * 24 * 60 * 60 * 1000; function isPostStale (line 91) | function isPostStale(post: BasePost): boolean { function filterFreshPosts (line 96) | function filterFreshPosts(posts: T[]): T[] { function formatDate (line 100) | function formatDate(dateString: string): string { function isImageUrl (line 120) | function isImageUrl(url: string): boolean { function BlueskyPostCard (line 131) | function BlueskyPostCard({ post }: { post: BlueskyPost }) { function FarcasterPostCard (line 228) | function FarcasterPostCard({ post }: { post: FarcasterPost }) { function GlassPostCard (line 305) | function GlassPostCard({ post }: { post: GlassPost }) { type SocialFeedsProps (line 358) | interface SocialFeedsProps { function SocialFeeds (line 362) | function SocialFeeds({ limit = 10 }: SocialFeedsProps) { FILE: src/content.config.ts constant GITHUB_OWNER (line 6) | const GITHUB_OWNER = 'iammatthias'; constant GITHUB_REPO (line 7) | const GITHUB_REPO = 'obsidian_cms'; constant GITHUB_BRANCH (line 8) | const GITHUB_BRANCH = 'main'; constant GITHUB_TOKEN (line 9) | const GITHUB_TOKEN = import.meta.env.GITHUB; FILE: src/lib/github-loader.ts type GitHubLoaderOptions (line 4) | interface GitHubLoaderOptions { type GitHubContentData (line 22) | type GitHubContentData = z.infer; type CachedFile (line 28) | interface CachedFile { type CachedCollection (line 35) | interface CachedCollection { type ContentCache (line 40) | interface ContentCache { function populateCache (line 59) | async function populateCache( function getCachedCollection (line 182) | function getCachedCollection( function getCachedTagMap (line 191) | function getCachedTagMap(): Map> { function ensureCachePopulated (line 198) | async function ensureCachePopulated( function githubLoader (line 212) | function githubLoader(options: GitHubLoaderOptions): Loader { function parseFrontmatter (line 337) | function parseFrontmatter(content: string): { function parseYaml (line 357) | function parseYaml(yaml: string): Record { function getGitHubCollections (line 423) | async function getGitHubCollections( FILE: src/lib/og-renderer.ts function renderToPng (line 8) | async function renderToPng( FILE: src/lib/tags-loader.ts type TagsLoaderOptions (line 5) | interface TagsLoaderOptions { type TagData (line 19) | type TagData = z.infer; function tagsLoader (line 21) | function tagsLoader(options: TagsLoaderOptions): Loader { FILE: src/pages/api/bluesky.json.ts constant USER_DID (line 4) | const USER_DID = "did:plc:p5xem22ammiafn5kxonaksfa"; constant PDS_HOST (line 5) | const PDS_HOST = "https://pds.iammatthias.com"; type BlobRef (line 8) | interface BlobRef { type RawImageEmbed (line 15) | interface RawImageEmbed { type RawVideoEmbed (line 24) | interface RawVideoEmbed { type RawExternalEmbed (line 31) | interface RawExternalEmbed { type RawRecordEmbed (line 41) | interface RawRecordEmbed { type RawRecordWithMediaEmbed (line 49) | interface RawRecordWithMediaEmbed { type RawEmbed (line 55) | type RawEmbed = type RawPostRecord (line 62) | interface RawPostRecord { type PDSRecord (line 83) | interface PDSRecord { type ListRecordsResponse (line 89) | interface ListRecordsResponse { type NormalizedImage (line 95) | interface NormalizedImage { type NormalizedVideo (line 104) | interface NormalizedVideo { type NormalizedExternal (line 112) | interface NormalizedExternal { type NormalizedQuote (line 120) | interface NormalizedQuote { type NormalizedEmbed (line 126) | type NormalizedEmbed = function getBlobUrl (line 133) | function getBlobUrl(did: string, cid: string): string { function normalizeEmbed (line 137) | function normalizeEmbed(embed: RawEmbed, did: string): NormalizedEmbed[] { FILE: src/pages/api/farcaster.json.ts constant HUB_URL (line 4) | const HUB_URL = "https://hub.merv.fun"; constant USER_FID (line 5) | const USER_FID = 2728; constant FARCASTER_EPOCH (line 8) | const FARCASTER_EPOCH = 1609459200; type FarcasterEmbed (line 10) | interface FarcasterEmbed { type FarcasterCastAddBody (line 18) | interface FarcasterCastAddBody { type FarcasterMessage (line 30) | interface FarcasterMessage { type FarcasterResponse (line 40) | interface FarcasterResponse { type NormalizedEmbed (line 46) | interface NormalizedEmbed { function farcasterTimestampToDate (line 53) | function farcasterTimestampToDate(timestamp: number): Date { FILE: src/pages/api/glass.json.ts type GlassExif (line 5) | interface GlassExif { type GlassPhoto (line 14) | interface GlassPhoto { FILE: src/pages/content/[collection]/rss.xml.ts type Entry (line 6) | type Entry = { function getStaticPaths (line 11) | async function getStaticPaths() { function GET (line 29) | async function GET(context: APIContext) { FILE: src/pages/rss.xml.ts type Entry (line 6) | type Entry = { function GET (line 12) | async function GET(context: APIContext) {