Skip to content
Merged
Show file tree
Hide file tree
Changes from 7 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.

1 change: 0 additions & 1 deletion apps/web/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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
5 changes: 2 additions & 3 deletions apps/web/src/lib/components/ChannelHeader.svelte
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
<script lang="ts">
import * as DropdownMenu from '$lib/components/ui/dropdown-menu/index.js';
import { ChevronDown, Check } from '@lucide/svelte';
import { remoteGetAllChannels } from '$lib/remote/channels.remote';
import { Button } from './ui/button';

const { channelId } = $props<{ channelId: string }>();
type Channel = { ytChannelId: string; name: string };

const channels = $derived(await remoteGetAllChannels());
const { channelId, channels }: { channelId: string; channels: Channel[] } = $props();

const selectedChannel = $derived(channels?.find((channel) => channel.ytChannelId === channelId));
</script>
Expand Down
14 changes: 10 additions & 4 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 @@ -19,11 +18,18 @@
import { formatNumber, formatDate, formatDaysAgo } from '$lib/utils';
import { Video } from '@lucide/svelte';

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));
type FullData = { videos: VideoType[] };

type VideoType = (typeof fullData.videos)[number];
const { channelId, fullData }: { channelId: string; fullData: FullData } = $props();

const columns: ColumnDef<VideoType>[] = [
{
Expand Down
13 changes: 8 additions & 5 deletions apps/web/src/lib/components/ChannelNotifications.svelte
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
<script lang="ts">
import { remoteGetChannelNotifications } from '$lib/remote/channels.remote';
import { createRawSnippet } from 'svelte';
import {
renderComponent,
Expand All @@ -19,9 +18,15 @@
import { formatRelativeTime } from '$lib/utils';
import { Bell } from '@lucide/svelte';

const { channelId }: { channelId: string } = $props();
type Notification = {
type: string;
success: boolean;
message: string;
videoTitle: string;
createdAt: Date;
};

const notifications = $derived(await remoteGetChannelNotifications(channelId));
const { notifications }: { notifications: Notification[] } = $props();

const getNotificationTypeLabel = (type: string) => {
return type
Expand All @@ -30,8 +35,6 @@
.join(' ');
};

type Notification = (typeof notifications)[number];

const columns: ColumnDef<Notification>[] = [
{
accessorKey: 'type',
Expand Down
16 changes: 11 additions & 5 deletions apps/web/src/lib/components/ChannelSponsorsTable.svelte
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
<script lang="ts">
import { remoteGetChannelSponsors } from '$lib/remote/channels.remote';
import { createRawSnippet } from 'svelte';
import {
renderComponent,
Expand All @@ -19,11 +18,18 @@
import { formatNumber, formatDate } from '$lib/utils';
import { Users } from '@lucide/svelte';

const { channelId }: { channelId: string } = $props();
type Sponsor = {
sponsorId: string;
name: string;
sponsorKey: string;
totalViews: number;
totalVideos: number;
avgViewsPerVideo: number;
lastVideoPublishedAt: Date | string | number | null;
lastVideoPublishedDaysAgo: number | null;
};

const sponsors = $derived(await remoteGetChannelSponsors(channelId));

type Sponsor = (typeof sponsors)[number];
const { channelId, sponsors }: { channelId: string; sponsors: Sponsor[] } = $props();

const columns: ColumnDef<Sponsor>[] = [
{
Expand Down
7 changes: 2 additions & 5 deletions apps/web/src/lib/components/ChannelVideos.svelte
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
<script lang="ts">
import { remoteGetChannelVideos } from '$lib/remote/channels.remote';
import { createRawSnippet } from 'svelte';
import {
renderComponent,
Expand All @@ -19,10 +18,6 @@
import { formatNumber, formatDate } from '$lib/utils';
import { Video } from '@lucide/svelte';

const { channelId }: { channelId: string } = $props();

const videos = $derived(await remoteGetChannelVideos(channelId));

type VideoType = {
ytVideoId: string;
title: string;
Expand All @@ -36,6 +31,8 @@
} | null;
};

const { channelId, videos }: { channelId: string; videos: VideoType[] } = $props();

const columns: ColumnDef<VideoType>[] = [
{
accessorKey: 'thumbnailUrl',
Expand Down
11 changes: 9 additions & 2 deletions apps/web/src/lib/components/ChannelsList.svelte
Original file line number Diff line number Diff line change
@@ -1,9 +1,16 @@
<script lang="ts">
import { remoteGetChannelsWithStats } from '$lib/remote/channels.remote';
import { formatNumber } from '$lib/utils';
import { TrendingUp, Video, Eye } from '@lucide/svelte';

const channels = $derived(await remoteGetChannelsWithStats());
type Channel = {
ytChannelId: string;
name: string;
videoCount: number;
totalViews: number;
latestVideo: { title: string; viewCount: number } | null;
};

let { channels }: { channels: Channel[] } = $props();
</script>

{#if channels.length === 0}
Expand Down
Loading
Loading