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 .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,4 @@ node_modules
dist
*.log
.env*
.DS_Store
.DS_Store
18 changes: 1 addition & 17 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
{
"typescript.experimental.useTsgo": false,
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true,
"workbench.colorCustomizations": {
Expand All @@ -11,21 +10,6 @@
"editor.codeActionsOnSave": {
"source.fixAll": "explicit"
},
"[typescript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[javascript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[svelte]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[json]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[jsonc]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"typescript.tsdk": "node_modules/typescript/lib",
"typescript.enablePromptUseWorkspaceTsdk": true,
"files.watcherExclude": {
Expand All @@ -35,4 +19,4 @@
"**/.svelte-kit/**": true,
"**/.turbo/**": true
}
}
}
10 changes: 10 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,13 @@ The Effect Solutions CLI provides curated best practices and patterns for Effect
- `effect-solutions search <term>` - Search topics by keyword

**Local Effect Source:** The Effect repository is cloned to `~/.local/share/effect-solutions/effect` for reference. Use this to explore APIs, find usage examples, and understand implementation details when the documentation isn't enough.

## btca

Trigger: user says "use btca" (for codebase/docs questions).

Run:

- btca ask -t <tech> -q "<question>"

Available <tech>: svelte, tailwindcss
3 changes: 0 additions & 3 deletions apps/bg/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,5 @@
"devDependencies": {
"@types/bun": "latest",
"prettier": "^3.7.4"
},
"peerDependencies": {
"typescript": "^5.9.3"
}
}
34 changes: 0 additions & 34 deletions apps/helpers/.gitignore

This file was deleted.

15 changes: 0 additions & 15 deletions apps/helpers/README.md

This file was deleted.

18 changes: 0 additions & 18 deletions apps/helpers/package.json

This file was deleted.

3 changes: 0 additions & 3 deletions apps/helpers/src/db/index.ts

This file was deleted.

35 changes: 0 additions & 35 deletions apps/helpers/src/wipe.ts

This file was deleted.

29 changes: 0 additions & 29 deletions apps/helpers/tsconfig.json

This file was deleted.

5 changes: 2 additions & 3 deletions apps/web/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,12 @@
"@r8y/db": "*",
"effect": "^3.19.10",
"mode-watcher": "^1.1.0",
"runed": "^0.36.0",
"runed": "^0.37.0",
"zod": "^4.1.13"
},
"devDependencies": {
"@internationalized/date": "^3.10.0",
"@lucide/svelte": "^0.544.0",
"@lucide/svelte": "^0.561.0",
"@sveltejs/kit": "^2.49.2",
"@sveltejs/vite-plugin-svelte": "^6.2.1",
"@tailwindcss/vite": "^4.1.17",
Expand All @@ -44,7 +44,6 @@
"tailwind-variants": "^3.2.2",
"tailwindcss": "^4.1.17",
"tw-animate-css": "^1.4.0",
"typescript": "^5.9.3",
"vite": "^7.2.7",
"vite-plugin-devtools-json": "^1.0.0"
}
Expand Down
2 changes: 1 addition & 1 deletion apps/web/src/lib/assets/favicon.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
45 changes: 45 additions & 0 deletions apps/web/src/lib/components/AppBreadcrumb.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
<script lang="ts">
import * as Breadcrumb from '$lib/components/ui/breadcrumb/index.js';
import { remoteGetChannel } from '$lib/remote/channels.remote';

type BreadcrumbItem =
| { type: 'link'; label: string; href: string }
| { type: 'page'; label: string; class?: string }
| { type: 'channel'; channelId: string; isLink?: boolean };

const { items }: { items: BreadcrumbItem[] } = $props();
</script>

<Breadcrumb.Root>
<Breadcrumb.List>
<Breadcrumb.Item>
<Breadcrumb.Link href="/app">Channels</Breadcrumb.Link>
</Breadcrumb.Item>
{#each items as item}
<Breadcrumb.Separator />
<Breadcrumb.Item>
{#if item.type === 'link'}
<Breadcrumb.Link href={item.href}>{item.label}</Breadcrumb.Link>
{:else if item.type === 'page'}
<Breadcrumb.Page class={item.class}>{item.label}</Breadcrumb.Page>
{:else if item.type === 'channel'}
<svelte:boundary>
{#snippet pending()}
<span class="text-muted-foreground">Loading...</span>
{/snippet}
{#snippet failed()}
<span class="text-destructive">Error</span>
{/snippet}
{#if item.isLink}
<Breadcrumb.Link href="/app/view/channel?channelId={item.channelId}">
{(await remoteGetChannel(item.channelId)).name}
</Breadcrumb.Link>
{:else}
<Breadcrumb.Page>{(await remoteGetChannel(item.channelId)).name}</Breadcrumb.Page>
{/if}
</svelte:boundary>
{/if}
</Breadcrumb.Item>
{/each}
</Breadcrumb.List>
</Breadcrumb.Root>
43 changes: 0 additions & 43 deletions apps/web/src/lib/components/ChannelHeader.svelte

This file was deleted.

29 changes: 18 additions & 11 deletions apps/web/src/lib/components/ChannelLastSevenVids.svelte
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
<script lang="ts">
import { remoteGetLast7VideosByViews } from '$lib/remote/channels.remote';
import { createRawSnippet } from 'svelte';
import {
renderComponent,
Expand All @@ -18,12 +17,20 @@
} from '@tanstack/table-core';
import { formatNumber, formatDate, formatDaysAgo } from '$lib/utils';
import { Video } from '@lucide/svelte';
import { remoteGetLast7Videos } from '$lib/remote/channels.remote';

const { channelId } = $props<{ channelId: string }>();
type VideoType = {
ytVideoId: string;
title: string;
thumbnailUrl: string;
viewCount: number;
publishedAt: Date;
sponsor: { name: string; sponsorId: string } | null;
};

const fullData = $derived(await remoteGetLast7VideosByViews(channelId));
const { channelId }: { channelId: string } = $props();

type VideoType = (typeof fullData.videos)[number];
const fullData = $derived(await remoteGetLast7Videos(channelId));

const columns: ColumnDef<VideoType>[] = [
{
Expand Down Expand Up @@ -147,29 +154,29 @@
<div class="space-y-4">
<div class="flex items-center justify-between">
<div class="flex items-center gap-3">
<h2 class="text-lg font-semibold text-foreground">Last 7 Days</h2>
<h2 class="text-foreground text-lg font-semibold">Last 7 Days</h2>
<Badge variant="secondary">{fullData.videos.length} videos</Badge>
</div>
</div>
{#if fullData.videos.length === 0}
<div
class="flex flex-col items-center justify-center rounded-xl border border-dashed border-border bg-muted/30 p-12"
class="border-border bg-muted/30 flex flex-col items-center justify-center rounded-xl border border-dashed p-12"
>
<div class="rounded-full bg-muted p-3">
<Video class="h-6 w-6 text-muted-foreground" />
<div class="bg-muted rounded-full p-3">
<Video class="text-muted-foreground h-6 w-6" />
</div>
<p class="mt-3 text-sm text-muted-foreground">No videos published in the last 7 days</p>
<p class="text-muted-foreground mt-3 text-sm">No videos published in the last 7 days</p>
</div>
{:else}
<div class="overflow-hidden rounded-xl border border-border">
<div class="border-border overflow-hidden rounded-xl border">
<Table.Root>
<Table.Header class="bg-muted/80">
{#key sorting}
{#each table.getHeaderGroups() as headerGroup (headerGroup.id)}
<Table.Row class="hover:bg-transparent">
{#each headerGroup.headers as header (header.id)}
<Table.Head
class="h-11 text-xs font-medium tracking-wide text-muted-foreground uppercase"
class="text-muted-foreground h-11 text-xs font-medium tracking-wide uppercase"
>
{#if !header.isPlaceholder}
<FlexRender
Expand Down
Loading
Loading