Next/4 pre alpha - #588
Conversation
…nitor filtering options
…I labels and improve data retrieval logic
…ization and update global constants for upload limits
… and SSLCall classes; update documentation links and restructure introduction content
There was a problem hiding this comment.
Pull request overview
This PR appears to be a “v4 pre-alpha” modernization pass: migrating many components/utilities to TypeScript + Svelte 5 runes, adding new UI primitives and client helpers, and introducing a server handle hook for API authentication/validation.
Changes:
- Added/rewrote multiple UI components (Breadcrumb, Alert, Badge, Avatar, Accordion, AlertDialog, etc.) using Svelte 5
$props()patterns. - Added new client utilities (URL resolver, monitor-bar batching client, timezone/layout client data helpers) and analytics beacon.
- Added/updated infra: API auth hook, migrations/seeds, build scripts, and new Docker Compose config (Redis + app).
Reviewed changes
Copilot reviewed 157 out of 892 changed files in this pull request and generated 21 comments.
Show a summary per file
| File | Description |
|---|---|
| src/lib/components/ui/button-group/button-group-separator.svelte | New separator wrapper for button-group styling. |
| src/lib/components/ui/breadcrumb/index.ts | New breadcrumb barrel exports (Root + aliases). |
| src/lib/components/ui/breadcrumb/breadcrumb.svelte | New breadcrumb root component using Svelte 5 props/children. |
| src/lib/components/ui/breadcrumb/breadcrumb-separator.svelte | Breadcrumb separator with default chevron icon. |
| src/lib/components/ui/breadcrumb/breadcrumb-page.svelte | Current-page breadcrumb element implementation. |
| src/lib/components/ui/breadcrumb/breadcrumb-list.svelte | Breadcrumb <ol> wrapper with layout classes. |
| src/lib/components/ui/breadcrumb/breadcrumb-link.svelte | Breadcrumb link with child snippet escape hatch. |
| src/lib/components/ui/breadcrumb/breadcrumb-item.svelte | Breadcrumb list-item wrapper. |
| src/lib/components/ui/breadcrumb/breadcrumb-ellipsis.svelte | Breadcrumb ellipsis with screen-reader label. |
| src/lib/components/ui/badge/index.ts | Moves variants/type exports to badge.svelte. |
| src/lib/components/ui/badge/badge.svelte | Reworked badge to Svelte 5 props + module variants export. |
| src/lib/components/ui/avatar/index.ts | New avatar barrel exports (Root/Image/Fallback + aliases). |
| src/lib/components/ui/avatar/avatar.svelte | Avatar root wrapper using bits-ui primitive. |
| src/lib/components/ui/avatar/avatar-image.svelte | Avatar image wrapper using bits-ui primitive. |
| src/lib/components/ui/avatar/avatar-fallback.svelte | Avatar fallback wrapper using bits-ui primitive. |
| src/lib/components/ui/alert/index.ts | Moves variants/type exports to alert.svelte and normalizes exports. |
| src/lib/components/ui/alert/alert.svelte | Reworked alert to Svelte 5 props + module variants export. |
| src/lib/components/ui/alert/alert-title.svelte | Changes alert title markup/semantics and props model. |
| src/lib/components/ui/alert/alert-description.svelte | Updates alert description layout classes and Svelte 5 props. |
| src/lib/components/ui/alert-dialog/index.ts | New alert-dialog barrel exports with aliases. |
| src/lib/components/ui/alert-dialog/alert-dialog.svelte | AlertDialog root wrapper using bits-ui primitive. |
| src/lib/components/ui/alert-dialog/alert-dialog-trigger.svelte | AlertDialog trigger wrapper. |
| src/lib/components/ui/alert-dialog/alert-dialog-title.svelte | AlertDialog title wrapper with consistent classes. |
| src/lib/components/ui/alert-dialog/alert-dialog-portal.svelte | AlertDialog portal wrapper. |
| src/lib/components/ui/alert-dialog/alert-dialog-overlay.svelte | AlertDialog overlay wrapper with animation classes. |
| src/lib/components/ui/alert-dialog/alert-dialog-header.svelte | AlertDialog header wrapper with Svelte 5 children rendering. |
| src/lib/components/ui/alert-dialog/alert-dialog-footer.svelte | AlertDialog footer wrapper with Svelte 5 children rendering. |
| src/lib/components/ui/alert-dialog/alert-dialog-description.svelte | AlertDialog description wrapper. |
| src/lib/components/ui/alert-dialog/alert-dialog-content.svelte | AlertDialog content composition (portal + overlay + content). |
| src/lib/components/ui/alert-dialog/alert-dialog-cancel.svelte | AlertDialog cancel button wrapper using buttonVariants. |
| src/lib/components/ui/alert-dialog/alert-dialog-action.svelte | AlertDialog action button wrapper using buttonVariants. |
| src/lib/components/ui/accordion/index.ts | Switches accordion Root export to local wrapper component. |
| src/lib/components/ui/accordion/accordion.svelte | New accordion root wrapper using bits-ui primitive. |
| src/lib/components/ui/accordion/accordion-trigger.svelte | Updates trigger props model and icon import. |
| src/lib/components/ui/accordion/accordion-item.svelte | Updates item wrapper props model and markup. |
| src/lib/components/ui/accordion/accordion-content.svelte | Updates content wrapper props model and animations. |
| src/lib/components/nav.svelte | Removes legacy nav component. |
| src/lib/components/manage/apiKeys.svelte | Removes legacy API keys management UI component. |
| src/lib/components/manage/alertsInfo.svelte | Removes legacy alerts info management UI component. |
| src/lib/components/loaderbox.svelte | Refactors loaderbox loop to stable keyed array and TS. |
| src/lib/components/gmi.svelte | Removes legacy image helper component. |
| src/lib/components/TimezoneSelector.svelte | Adds timezone selector using Popover + Command UI. |
| src/lib/components/SiteBanner.svelte | Adds dismissible/cancellable announcement banner with localStorage persistence. |
| src/lib/components/MonitorBar.svelte | Adds monitor bar card with skeleton/error/loaded states. |
| src/lib/components/MaintenanceItem.svelte | Adds maintenance list item component with monitor popovers. |
| src/lib/components/LatencyTrendChart.svelte | Adds latency area chart component using layerchart. |
| src/lib/components/LanguageSelector.svelte | Adds locale selector using Select UI and i18n store. |
| src/lib/components/KenerNav.svelte | Adds new nav component using NavigationMenu + Dropdown. |
| src/lib/components/KenerFooter.svelte | Adds footer rendering from page.data.footerHTML. |
| src/lib/components/IncidentNew.svelte | Removes legacy incident component implementation. |
| src/lib/components/IncidentMonitorList.svelte | Adds incident group/list wrapper component. |
| src/lib/components/IncidentItem.svelte | Adds incident list item component with monitor popovers. |
| src/lib/components/EventsCard.svelte | Adds status display card. |
| src/lib/components/EmbedMenu.svelte | Adds embed-code dialog for monitor + latency embeds. |
| src/lib/components/CopyButton.svelte | Adds reusable copy-to-clipboard button. |
| src/lib/components/BadgesMenu.svelte | Adds badges dialog with copy actions. |
| src/lib/components/AllMaintenanceMonitorGrid.svelte | Adds three-column maintenance grid with deduplication. |
| src/lib/color.ts | Converts status color helper from JS to typed TS. |
| src/lib/color.js | Removes legacy JS color helper. |
| src/lib/clientTools.ts | Major TS refactor: adds status summary/color helpers, latency formatting, initials. |
| src/lib/client/types/ui.ts | Adds client-only ThemeMode type. |
| src/lib/client/resolver.ts | Adds client wrapper for SvelteKit resolve with absolute URL passthrough. |
| src/lib/client/monitor-bar-client.ts | Adds batching client for monitor-bar fetching. |
| src/lib/client/layoutClientData.ts | Adds client-side i18n + timezone init and derived timestamps. |
| src/lib/client/datetime.ts | Adds client helper for end-of-day timestamp at timezone. |
| src/lib/boringOne.js | Removes legacy analytics event helper. |
| src/lib/beacon.ts | Adds typed analytics beacon dispatcher (and console logging). |
| src/lib/anywhere.ts | Converts some runtime templates/constants from JS to TS module. |
| src/lib/anywhere.js | Removes legacy JS module with templates + constants. |
| src/lib/alerts/alert-text.ts | Adds alert text helper for label/help/description generation. |
| src/lib/Embed.svelte | Types embed component and refines iframe sandbox/event typing. |
| src/hooks.server.ts | Adds API authentication + resource existence validation in handle. |
| src/hooks.server.js | Removes legacy JS-only hook. |
| src/docs.css | Removes legacy docs CSS. |
| src/app.postcss | Removes legacy Tailwind entry CSS file. |
| src/app.html | Removes extra blank line in base HTML template. |
| seeds/site_data.ts | Converts site_data seed to TS and makes insertion idempotent per key. |
| seeds/site_data.js | Removes legacy JS seed. |
| seeds/pages.ts | Adds TS seed for pages and default monitor assignments. |
| seeds/monitors.ts | Adds TS seed for monitors (includes is_hidden and settings). |
| seeds/monitors.js | Removes legacy JS monitors seed. |
| seeds/generate_template.ts | Adds TS seed for general email templates. |
| scripts/main.ts | Adds TS server entry with migrations + seed + graceful shutdown. |
| scripts/index-docs.ts | Adds standalone docs indexing script for Redis search. |
| scripts/generate-readme.js | Removes legacy readme generation script. |
| scripts/build-sveltekit.js | Adds build script to optionally exclude docs routes. |
| scripts/build-server.js | Adds esbuild-based server bundling script for production. |
| postcss.config.cjs | Removes legacy PostCSS config. |
| migrations/20260202090915_add_new_columns_data_monitors.ts | Adds external_url and error_message columns. |
| migrations/20260128152323_drop_old_subs_table.ts | Drops legacy subscription tables and defines down migration to recreate. |
| migrations/20260128145145_add_general_email_templates.ts | Adds general_email_templates table. |
| migrations/20260128130000_add_email_triggers_config.ts | Adds email_templates_config table. |
| migrations/20260128120000_redesign_subscription_system.ts | Adds new subscription system tables (subscriber_users/methods/subscriptions). |
| migrations/20260124120001_monitor_alert_config_id.ts | Adds monitor_alerts_v2 table referencing config + incidents. |
| migrations/20260124120000_add_monitor_alerts_config_tables.ts | Adds alert config + junction tables and indexes. |
| migrations/20260123110239_maintenace_monitor_status.ts | Adds monitor impact column to maintenance monitors. |
| migrations/20260120120000_add_monitor_settings_json.ts | Adds monitor_settings_json to monitors. |
| migrations/20260117120000_add_is_hidden_to_monitors.ts | Adds is_hidden column to monitors. |
| migrations/20260114120000_remove_monitors_name_unique.ts | Drops unique constraint on monitors name. |
| migrations/20260109120000_add_maintenances_tables.ts | Adds maintenance tables and indexes. |
| migrations/20260107120000_add_pages_tables.ts | Adds pages + pages_monitors tables and indexes. |
| migrations/20260106120000_add_images_table.ts | Adds images storage table. |
| migrations/20251223033957_performance_indexing.ts | Adds/rolls back performance indexes across multiple tables. |
| migrations/20250111153517_init.js | Minor formatting change to raw SQL index creation. |
| main.js | Removes legacy JS server entrypoint. |
| knip.json | Adds knip configuration for unused exports/deps detection. |
| knexfile.ts | Adds basic typing for knex config and removes ts-nocheck. |
| jsconfig.json | Removes JS config (likely TS-first migration). |
| entrypoint.sh | Removes legacy container entrypoint script. |
| embed.html | Removes legacy embed test HTML. |
| docs/structure.json | Removes legacy docs structure config. |
| docs/showcase.md | Removes legacy showcase doc. |
| docs/gh-setup.md | Removes legacy GH setup doc. |
| docs/categorize-guide.md | Removes legacy categorize guide doc. |
| docs/alerts.md | Removes legacy alerts doc. |
| docker/root/etc/s6-overlay/s6-rc.d/svc-app/type | Removes s6-overlay service file (container init rework). |
| docker/root/etc/s6-overlay/s6-rc.d/svc-app/run | Removes s6-overlay run script (container init rework). |
| docker/root/etc/s6-overlay/s6-rc.d/init-app-config/up | Removes s6-overlay init file. |
| docker/root/etc/s6-overlay/s6-rc.d/init-app-config/type | Removes s6-overlay init file. |
| docker/root/etc/s6-overlay/s6-rc.d/init-app-config/run | Removes s6-overlay init script. |
| docker-compose.yml | Rewrites compose for v4 production (adds Redis, volumes, optional DBs). |
| docker-compose.dev.yml | Adds compose override for local Dockerfile builds. |
| components.json | Updates shadcn-svelte config and aliases; points CSS to new path. |
| check-output.txt | Adds svelte-check output artifact for reference. |
| README.template.md | Removes legacy readme template. |
| LICENSE | Removes license file from repo. |
| AGENTS.md | Adds agent tooling instructions doc. |
| .npmrc | Enforces engine-strict=true. |
| .github/copilot-instructions.md | Adds repo-specific GitHub Copilot instructions. |
| .env.example | Removes legacy env example. |
| .env-min.example | Adds minimal env example. |
| .dockerignore | Expands ignore list for cleaner docker build contexts. |
| .claude/skills/svelte-code-writer/SKILL.md | Adds Svelte MCP skill doc for tool-based workflows. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| data-slot="avatar" | ||
| class={cn("relative flex size-8 shrink-0 overflow-hidden rounded-full", className)} | ||
| {...restProps} | ||
| /> |
There was a problem hiding this comment.
The Avatar Root wrapper is self-closing, so any children passed to <Avatar.Root>...</Avatar.Root> will be dropped (e.g., <Avatar.Image/> / <Avatar.Fallback/> will never render). Change this to an opening/closing tag and render children (or a <slot />) inside the primitive root.
| /> | |
| > | |
| <slot /> | |
| </AvatarPrimitive.Root> |
| let { ref = $bindable(null), value = $bindable(), ...restProps }: AccordionPrimitive.RootProps = $props(); | ||
| </script> | ||
|
|
||
| <AccordionPrimitive.Root bind:ref bind:value={value as never} data-slot="accordion" {...restProps} /> |
There was a problem hiding this comment.
The Accordion Root wrapper is self-closing, so nested <Accordion.Item/> children inside <Accordion.Root>...</Accordion.Root> will not render. Convert this to an opening/closing tag and render children inside.
| <AccordionPrimitive.Root bind:ref bind:value={value as never} data-slot="accordion" {...restProps} /> | |
| <AccordionPrimitive.Root bind:ref bind:value={value as never} data-slot="accordion" {...restProps}> | |
| <slot /> | |
| </AccordionPrimitive.Root> |
| data-slot="accordion-item" | ||
| class={cn("border-b last:border-b-0", className)} | ||
| {...restProps} | ||
| /> |
There was a problem hiding this comment.
The Accordion Item wrapper is self-closing, which will drop the trigger/content children that are typically nested inside an accordion item. Use an opening/closing <AccordionPrimitive.Item> and render children inside so <Accordion.Item>...</Accordion.Item> works.
| /> | |
| > | |
| <slot /> | |
| </AccordionPrimitive.Item> |
| let { ...restProps }: AlertDialogPrimitive.PortalProps = $props(); | ||
| </script> | ||
|
|
||
| <AlertDialogPrimitive.Portal {...restProps} /> |
There was a problem hiding this comment.
The Portal wrapper is self-closing, so any content passed inside <AlertDialogPortal>...</AlertDialogPortal> (like overlay/content) will be discarded. Change to an opening/closing tag and render children inside the portal.
| <AlertDialogPrimitive.Portal {...restProps} /> | |
| <AlertDialogPrimitive.Portal {...restProps}> | |
| <slot /> | |
| </AlertDialogPrimitive.Portal> |
| let { ref = $bindable(null), ...restProps }: AlertDialogPrimitive.TriggerProps = $props(); | ||
| </script> | ||
|
|
||
| <AlertDialogPrimitive.Trigger bind:ref data-slot="alert-dialog-trigger" {...restProps} /> |
There was a problem hiding this comment.
The Trigger wrapper is self-closing, so the trigger label/contents passed to <AlertDialog.Trigger>...</AlertDialog.Trigger> won’t render. Convert to an opening/closing tag and render children inside.
| <AlertDialogPrimitive.Trigger bind:ref data-slot="alert-dialog-trigger" {...restProps} /> | |
| <AlertDialogPrimitive.Trigger bind:ref data-slot="alert-dialog-trigger" {...restProps}> | |
| <slot /> | |
| </AlertDialogPrimitive.Trigger> |
| }); | ||
| } | ||
| const allRecordTypes = { | ||
| const AllRecordTypes = { |
There was a problem hiding this comment.
This refactor removes previously-exported symbols (e.g., siteDataExtractFromDb, and renames allRecordTypes → AllRecordTypes). If other modules import these named exports, this will be a breaking change. Consider re-exporting backward-compatible aliases (e.g., export { siteDataExtractFromDb } and/or export const allRecordTypes = AllRecordTypes) to avoid widespread import churn.
| export { | ||
| siteDataExtractFromDb, | ||
| storeSiteData, | ||
| allRecordTypes, | ||
| AllRecordTypes, |
There was a problem hiding this comment.
This refactor removes previously-exported symbols (e.g., siteDataExtractFromDb, and renames allRecordTypes → AllRecordTypes). If other modules import these named exports, this will be a breaking change. Consider re-exporting backward-compatible aliases (e.g., export { siteDataExtractFromDb } and/or export const allRecordTypes = AllRecordTypes) to avoid widespread import churn.
| GetStatusBgColor, | ||
| ParseLatency, | ||
| GetInitials, | ||
| }; |
There was a problem hiding this comment.
This refactor removes previously-exported symbols (e.g., siteDataExtractFromDb, and renames allRecordTypes → AllRecordTypes). If other modules import these named exports, this will be a breaking change. Consider re-exporting backward-compatible aliases (e.g., export { siteDataExtractFromDb } and/or export const allRecordTypes = AllRecordTypes) to avoid widespread import churn.
| }; | |
| }; | |
| // Backward-compatible alias for previously exported symbol | |
| export const allRecordTypes = AllRecordTypes; |
| @@ -0,0 +1,83 @@ | |||
| import { handler } from "../build/handler.js"; | |||
| import { apiReference } from "@scalar/express-api-reference"; | |||
There was a problem hiding this comment.
apiReference and fs-extra are imported but not used in this file, which adds noise and can confuse readers/tools. Remove these unused imports or wire them up if they’re intended for future use.
| import shutdownSchedulers from "../src/lib/server/schedulers/shutdown.ts"; | ||
| import shutdownQueues from "../src/lib/server/queues/shutdown.ts"; | ||
| import dbInstance from "../src/lib/server/db/db.ts"; | ||
| import fs from "fs-extra"; |
There was a problem hiding this comment.
apiReference and fs-extra are imported but not used in this file, which adds noise and can confuse readers/tools. Remove these unused imports or wire them up if they’re intended for future use.
…cy display in embed page
…options for monitors
…e dashboard data handling
…nces in dashboard
…mage and custom CSS support
…ved tagging and concurrency
…w status messages feat(links): Correct URL formatting in invitation and verification email links refactor(notification): Simplify notification utility imports chore(docs): Update Discord link and API reference URLs in documentation style(buttons): Change button variant for better UI consistency chore(scripts): Implement script to sort translation keys in locale files
…irement; refactor Docker setup for documentation indexing
No description provided.