Skip to content

Next/4 pre alpha - #588

Merged
rajnandan1 merged 108 commits into
mainfrom
next/4-pre-alpha
Feb 23, 2026
Merged

Next/4 pre alpha#588
rajnandan1 merged 108 commits into
mainfrom
next/4-pre-alpha

Conversation

@rajnandan1

Copy link
Copy Markdown
Owner

No description provided.

Copilot AI review requested due to automatic review settings February 16, 2026 04:52

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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}
/>

Copilot AI Feb 16, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Suggested change
/>
>
<slot />
</AvatarPrimitive.Root>

Copilot uses AI. Check for mistakes.
let { ref = $bindable(null), value = $bindable(), ...restProps }: AccordionPrimitive.RootProps = $props();
</script>

<AccordionPrimitive.Root bind:ref bind:value={value as never} data-slot="accordion" {...restProps} />

Copilot AI Feb 16, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Suggested change
<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>

Copilot uses AI. Check for mistakes.
data-slot="accordion-item"
class={cn("border-b last:border-b-0", className)}
{...restProps}
/>

Copilot AI Feb 16, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Suggested change
/>
>
<slot />
</AccordionPrimitive.Item>

Copilot uses AI. Check for mistakes.
let { ...restProps }: AlertDialogPrimitive.PortalProps = $props();
</script>

<AlertDialogPrimitive.Portal {...restProps} />

Copilot AI Feb 16, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Suggested change
<AlertDialogPrimitive.Portal {...restProps} />
<AlertDialogPrimitive.Portal {...restProps}>
<slot />
</AlertDialogPrimitive.Portal>

Copilot uses AI. Check for mistakes.
let { ref = $bindable(null), ...restProps }: AlertDialogPrimitive.TriggerProps = $props();
</script>

<AlertDialogPrimitive.Trigger bind:ref data-slot="alert-dialog-trigger" {...restProps} />

Copilot AI Feb 16, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Suggested change
<AlertDialogPrimitive.Trigger bind:ref data-slot="alert-dialog-trigger" {...restProps} />
<AlertDialogPrimitive.Trigger bind:ref data-slot="alert-dialog-trigger" {...restProps}>
<slot />
</AlertDialogPrimitive.Trigger>

Copilot uses AI. Check for mistakes.
Comment thread src/lib/clientTools.ts
});
}
const allRecordTypes = {
const AllRecordTypes = {

Copilot AI Feb 16, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This refactor removes previously-exported symbols (e.g., siteDataExtractFromDb, and renames allRecordTypesAllRecordTypes). 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.

Copilot uses AI. Check for mistakes.
Comment thread src/lib/clientTools.ts
Comment on lines 374 to +375
export {
siteDataExtractFromDb,
storeSiteData,
allRecordTypes,
AllRecordTypes,

Copilot AI Feb 16, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This refactor removes previously-exported symbols (e.g., siteDataExtractFromDb, and renames allRecordTypesAllRecordTypes). 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.

Copilot uses AI. Check for mistakes.
Comment thread src/lib/clientTools.ts
GetStatusBgColor,
ParseLatency,
GetInitials,
};

Copilot AI Feb 16, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This refactor removes previously-exported symbols (e.g., siteDataExtractFromDb, and renames allRecordTypesAllRecordTypes). 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.

Suggested change
};
};
// Backward-compatible alias for previously exported symbol
export const allRecordTypes = AllRecordTypes;

Copilot uses AI. Check for mistakes.
Comment thread scripts/main.ts Outdated
@@ -0,0 +1,83 @@
import { handler } from "../build/handler.js";
import { apiReference } from "@scalar/express-api-reference";

Copilot AI Feb 16, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Copilot uses AI. Check for mistakes.
Comment thread scripts/main.ts Outdated
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";

Copilot AI Feb 16, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Copilot uses AI. Check for mistakes.
rajnandan1 and others added 20 commits February 16, 2026 11:16
…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
@rajnandan1
rajnandan1 merged commit 1df62bc into main Feb 23, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants