asepharyana
2b514142e6
feat(leptos): UI primitives — Button, Badge, Card
2026-07-03 17:41:07 +07:00
asepharyana
65804acaca
feat(leptos): css design system with component classes and animations
2026-07-03 17:36:28 +07:00
asepharyana
c4c43ce912
feat(leptos): frontend crate scaffold with empty app
...
- frontend/ crate compiles to WASM via trunk
- empty Leptos app mounted to body via wasm_bindgen(start)
- dependencies: leptos 0.7 CSR, leptos-use, lucide-leptos, gloo-net, web-sys
- workspace cargo check passes (first time the workspace compiles end-to-end)
- trunk build produces 65KB WASM + 25KB JS glue
Deviations from brief:
- lucide-leptos: 0.5 (brief) -> 3 (only version published)
- web-sys: removed invalid features ArrayBuffer/DataView (in js-sys/wasm-bindgen)
- src/main.rs -> src/lib.rs with #[wasm_bindgen(start)] to avoid bin/lib duplicate artifact
2026-07-03 17:09:44 +07:00
asepharyana
f67bc5125b
fix(leptos): correct shared-types timestamps to match JSON wire format
2026-07-03 07:24:28 +07:00
asepharyana
7b746350ca
chore: ignore worktrees directory
2026-07-03 06:48:30 +07:00
asepharyana
7f6063909d
docs: implementation plan for leptos rewrite phase 1 & 2
2026-07-03 06:38:39 +07:00
asepharyana
4fb59cda95
docs: leptos frontend rewrite design spec
2026-07-03 06:07:12 +07:00
asepharyana
0926f235cb
fix(auth): only reset activeTab on mount, don't block tab switching
...
Previous code continuously forced activeTab to 'messages' when not
authenticated, making dashboard and voice tabs unclickable.
Now uses useEffect once on mount to reset localStorage carryover,
then lets tab switching work normally.
2026-07-02 07:45:02 +07:00
asepharyana
948e41cec6
fix(ui): chat bubble max-w-xs broken by tailwind spacing override (4px not 320px)
...
tailwind.config.js overrides spacing.xs to 4px, which also overrides
max-w-xs to max-width: 4px instead of the default 20rem (320px).
Changed to explicit max-w-[280px] to bypass the corrupted token.
2026-07-02 07:08:58 +07:00
asepharyana
77812f9452
fix(auth): force activeTab to messages if not authenticated — prevent localStorage carryover
...
When a user visited the Live tab in a previous session, localStorage
stored activeTab: 'live'. On page reload, even with the new auth guard,
the app would try to render the Live tab and show the auth overlay.
Now if not authenticated, activeTab is always forced to 'messages'.
2026-07-02 07:06:33 +07:00
asepharyana
58de0df24b
fix(ui): chat bubble text wrapping — replace break-words with overflow-wrap:anywhere
...
Fixes MascotChatbot messages wrapping 1 character per line.
overflow-wrap:anywhere handles long unbroken strings better
than break-words which only breaks at word boundaries.
2026-07-02 06:53:27 +07:00
asepharyana
ffea9bb0ba
fix(backend): only require auth for voice/media routes, rest public
...
Messages, analysis, mascot-chat, recordings, ui-state, and guilds
endpoints are now accessible without authentication.
Only voice (connect/disconnect/transmit) and media (queue/skip/stop/volume)
remain behind the admin password guard.
2026-07-02 06:51:57 +07:00
asepharyana
0ae1ef1987
fix(auth): only guard Live tab, messages & dashboard are public
...
Auth overlay only shows when accessing Voice & Media without
authentication. Messages panel and Dashboard panel remain fully
accessible without login.
2026-07-02 06:40:39 +07:00
asepharyana
112b865a5b
fix(infra): bypass Cloudflare Rocket Loader — breaks ES module scripts
...
Cloudflare Rocket Loader transforms <script type="module"> into
type="<hash>-module", which the browser cannot parse as ES module.
The React app never mounts — blank page on every route.
Fix: Vite plugin adds data-cfasync="false" attribute to the module
script tag, telling Rocket Loader to skip transformation.
Also: remove dist/ from the commit (build artifacts excluded).
2026-07-02 06:30:26 +07:00
asepharyana
d53ec74d64
fix(build): resolve Tailwind 4 @apply breaking changes
...
- Replace @apply im-btn in im-btn-primary/secondary/ghost
with inline Tailwind utilities + CSS properties
- Replace @apply im-status-dot in status dot variants
with inline properties
- Tailwind 4 cannot @apply component-level classes from within
@layer components — only standard utility classes are valid
2026-07-02 06:17:58 +07:00
asepharyana and workflow agents
ade5d6a7c3
fix: backend and discord-gateway improvements
...
- Update shared database schema
- Add shared utils
- Refactor backend middleware, auth routes, and dashboard repository
- Improve media analysis client with better error handling
- Fix searxng search URL construction
- Update URL fetcher for robustness
Co-authored-by: workflow agents
2026-07-02 06:02:07 +07:00
asepharyana
81a004d250
feat(frontend): IMPHNEN design deep integration — full 5-layer redesign
...
Layer 0 — Foundation:
- Dark mode palette (30+ CSS var pairs in [data-theme='dark'])
- CSS-first theme engine in styles.css (@theme + CSS vars)
- UseTheme hook with light/dark/system support + localStorage persistence
- Fixed animation keyframes (shimmer 1.5s canonical, glowPulse moved to CSS)
- Smooth theme switch transitions via .theme-transitioning class
Layer 1 — Shared UI Components:
- Badge: success/warning variants now use CSS vars (bg-success-soft text-success)
- Toast: rewritten with CSS vars, z-index fixed (40), repositioned top-right
- Skeleton: added variant prop (rounded/circular/rectangular)
- EmptyState: new component with icon + title + description + action
- Button: added tertiary variant + icon-sm size
- Card: added elevated/bordered variants
- Input: added soft variant
Layer 2 — Layout & Navigation:
- TabStrip: new horizontal tab navigation with spring underline indicator (z-30)
- Sidebar: expanded by default (w-64), brand assets always visible
- Header: simplified brand bar, removed redundant page titles, added ThemeToggle
- MobileTabBar: enhanced with spring dot indicator + glass bg + safe area
- DashboardLayout: integrated TabStrip between Header and content
- ParticleBackground: lazy render, skips on mobile/reduced-motion
Layer 3 — Feature Components:
- MessageCard: 30+ hardcoded hex replacements → semantic CSS vars
- MessagesPanel: stat badges use Badge component variants
- DashboardStats: StatCard with variant system (primary/success/warning/destructive)
- UserSummaryList/UserProfileDetail/ChannelProfileDetail: all hardcoded colors → CSS vars
- AudioVisualizer: reads --primary CSS var at paint time
- ActiveSpeakers/RecordingsSubPanel: hardcoded colors → CSS vars
Layer 4 — Polish:
- EmptyState integrated across messages/dashboard/live panels
- Theme toggle wired in Header + App root
- Hover state audit for consistency
- Entry animations verified (cardStagger/cardItem pattern in all panels)
Resolves DESIGN_TOKENS.md §13.x issues: hardcoded colors, shimmer mismatch,
glow-pulse fragmentation, z-index collisions, toast positioning.
2026-07-02 05:58:36 +07:00
asepharyana
7cfc7ccf07
docs: add implementation plan for frontend redesign
...
21-task plan covering 5 layers:
- Foundation (theme engine, dark mode, animations)
- Components (Badge, Toast, Skeleton, EmptyState, variants)
- Layout (TabStrip, Sidebar, Header, Mobile, DashboardLayout)
- Features (Messages, Dashboard, Live panel cleanup)
- Polish (empty states, theme toggle, animation audit)
2026-07-02 05:42:40 +07:00
asepharyana
970a1cb7f7
docs: bete frontend redesign spec — IMPHNEN deep integration
...
Full 5-layer design document covering:
- Layer 0: Theme tokens & dark mode palette (light + dark CSS vars)
- Layer 1: Shared UI components (Badge, Toast, Skeleton fixes + new primitives)
- Layer 2: Layout & navigation (sidebar expanded, brand bar, tab strip, mobile)
- Layer 3: Feature components (MessageCard, Dashboard, Live panel refinements)
- Layer 4: Polish & micro-interactions (animations, empty states, theme toggle, mascot)
Resolves known issues in DESIGN_TOKENS.md §13 (hardcoded hex colors, z-index,
shimmer mismatch). Adds dark mode support across all components.
2026-07-02 05:40:04 +07:00
asepharyana
bf9d018f7a
fix: skip AI analysis for channel 1508059937031589949
2026-07-02 04:28:33 +07:00
asepharyana
c5a9371e71
fix(infra): nginx upstream DNS staleness — 502 after backend restart
...
- Replace upstream blocks with variable-based proxy_pass + Docker DNS
resolver (127.0.0.11) so nginx resolves hostnames dynamically on
each request instead of caching at startup only.
- Add explicit 'docker compose restart proxy' in CI deploy step
(belt-and-suspenders: also forces nginx restart after deploy).
- Remove no-op sed commands from CI (docker-compose.yml already uses
GitLab registry, no ghcr.io replacements needed).
Root cause: docker compose up -d only recreates containers whose image
changed. When backend container is recreated (new Docker IP), nginx
still caches the old IP → 502 Bad Gateway on /api/*
2026-07-02 04:22:16 +07:00
asepharyana
fa82593a38
fix: switch to node:22-slim, install deps from npm, remove vendor
2026-07-02 04:07:18 +07:00
asepharyana
1495211a61
chore: remove vendor directory
2026-07-02 04:03:32 +07:00
asepharyana
950bc03708
chore: update docker-compose to GitLab registry, remove .gitmodules
2026-07-02 04:03:21 +07:00
asepharyana
edc1a2d1fc
chore: restore .gitlab-ci.yml after revert
2026-07-02 03:57:13 +07:00
asepharyana
7efaf00c93
Revert "feat: migrate frontend to Astro + expand AI moderation + backend admin/runtime config"
...
This reverts commit d59b59a7a7 .
2026-07-02 03:54:44 +07:00
asepharyana
9636087e99
Revert "docs: add Astro migration design spec"
...
This reverts commit e8b1827638 .
2026-07-02 03:54:44 +07:00
asepharyana
6ecff523c7
Revert "docs: add Astro migration implementation plan"
...
This reverts commit 5e40b1ad8c .
2026-07-02 03:54:44 +07:00
asepharyana
bf86fcda8e
Revert "feat: migrate frontend to Astro SSG with design system"
...
This reverts commit 8ad888da28 .
2026-07-02 03:54:44 +07:00
asepharyana
880c68fbab
Revert "ci: migrate from GitHub Actions to GitLab CI/CD"
...
This reverts commit c64dd7c2ee .
2026-07-02 03:54:44 +07:00
asepharyana
26d33dd76b
Revert "ci: simplify GitLab CI — SSH → git pull → docker compose up -d --build"
...
This reverts commit a62c23f1e8 .
2026-07-02 03:54:44 +07:00
asepharyana
3b64a5892f
Revert "ci: switch to debian:stable-slim for SSH compatibility"
...
This reverts commit 0da9839b3a .
2026-07-02 03:54:44 +07:00
asepharyana
10839141d9
Revert "ci: add Docker build + GitLab Container Registry push before deploy"
...
This reverts commit 90b317731b .
2026-07-02 03:54:44 +07:00
asepharyana
9e315a9574
Revert "ci: remove docker tag — shared runners don't have it"
...
This reverts commit 13bba60e3a .
2026-07-02 03:54:44 +07:00
asepharyana
d37cecdb38
Revert "fix(Dockerfile): use node:22-slim for backend (glibc), add linux-headers + nodedir for gateway"
...
This reverts commit 9e8f4377af .
2026-07-02 03:54:44 +07:00
asepharyana
81f541c080
Revert "fix(Dockerfile): switch discord-gateway to node:22-slim for opus compatibility"
...
This reverts commit 51d3e47fe3 .
2026-07-02 03:54:44 +07:00
asepharyana
c408a8d1f7
Revert "fix(Dockerfile): install Rust via rustup for node-crc compatibility"
...
This reverts commit 0200c77fc2 .
2026-07-02 03:54:44 +07:00
asepharyana
ba399e6621
Revert "ci: add GIT_SUBMODULE_STRATEGY for vendor dependencies"
...
This reverts commit 7b106fe562 .
2026-07-02 03:54:44 +07:00
asepharyana
586627319f
Revert "refactor: vendor content as regular files (remove git submodules) so CI builds don't need GitHub auth"
...
This reverts commit 134674d7dd .
2026-07-02 03:54:44 +07:00
asepharyana
24c738dd19
Revert "fix: split LiveShell into Astro layout + individual islands"
...
This reverts commit 6e1757410a .
2026-07-02 03:54:44 +07:00
asepharyana
91e14abbda
Revert "fix: update nginx for Astro SSG — /_astro/ cache, remove SPA fallback"
...
This reverts commit 918e45f9da .
2026-07-02 03:54:44 +07:00
asepharyana
5a10bec67a
Revert "fix: replace Astro.redirect with direct live content at /"
...
This reverts commit 34ac4be6c2 .
2026-07-02 03:54:44 +07:00
asepharyana
34ac4be6c2
fix: replace Astro.redirect with direct live content at /
2026-07-02 03:47:23 +07:00
asepharyana
918e45f9da
fix: update nginx for Astro SSG — /_astro/ cache, remove SPA fallback
2026-07-02 03:42:56 +07:00
asepharyana
6e1757410a
fix: split LiveShell into Astro layout + individual islands
...
- Rewrite live.astro to use Astro Sidebar/Header/Card components
- VoiceControls becomes self-contained (fetches guilds/channels internally)
- Remove LiveShell.tsx (no longer needed)
- Each React island uses appropriate client:load/idle directive
2026-07-02 03:13:54 +07:00
asepharyana
134674d7dd
refactor: vendor content as regular files (remove git submodules) so CI builds don't need GitHub auth
2026-07-02 02:38:04 +07:00
asepharyana
7b106fe562
ci: add GIT_SUBMODULE_STRATEGY for vendor dependencies
2026-07-02 02:33:54 +07:00
asepharyana
0200c77fc2
fix(Dockerfile): install Rust via rustup for node-crc compatibility
2026-07-02 02:29:36 +07:00
asepharyana
51d3e47fe3
fix(Dockerfile): switch discord-gateway to node:22-slim for opus compatibility
2026-07-02 02:26:34 +07:00
asepharyana
9e8f4377af
fix(Dockerfile): use node:22-slim for backend (glibc), add linux-headers + nodedir for gateway
2026-07-02 02:22:09 +07:00