Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
74cc87f
feat: add PostgreSQL service configuration in docker-compose
DarthGigi May 21, 2026
ac14068
chore: update deps and remove depricated options and deps
DarthGigi May 21, 2026
c077847
feat(accounts): setup drizzle, better-auth and initial account system
DarthGigi May 23, 2026
0f0fa4c
fix(init): skip migrations during build process
DarthGigi May 23, 2026
7e3c9cc
Merge pull request #328 from SkyCryptWebsite/feat/initial-accounts-setup
DarthGigi May 23, 2026
9c095a7
chore: version packages (beta) [skip ci]
github-actions[bot] May 23, 2026
59cc1a2
fix(deps): update prettier-plugin-svelte to version 4.0.1 and adjust …
DarthGigi May 23, 2026
8d0c28c
fix(deps): update takumi-js to version ^1.4.0 in package.json and pnp…
DarthGigi May 23, 2026
94bd1ab
chore(drizzle): change output paths
DarthGigi May 23, 2026
05cafc6
feat(auth): dynamically import openAPI plugin in development
DarthGigi May 23, 2026
a74b033
feat(newsroom): add CMS-backed newsroom
DarthGigi Jun 4, 2026
c2b599e
feat(newsroom): add new post notifications
DarthGigi Jun 5, 2026
bc5f13b
chore: version packages (beta) [skip ci]
github-actions[bot] Jun 5, 2026
31d283e
fix: migrate remote query calls
DarthGigi Jun 5, 2026
0ae985e
refactor(newsroom): render rich text with payload html
DarthGigi Jun 5, 2026
eff3f7a
chore: version packages (beta) [skip ci]
github-actions[bot] Jun 5, 2026
a4b6f52
feat(newsroom): enhance NewPostsToast with type badges and improved l…
DarthGigi Jun 5, 2026
07d9912
chore: align config with sv@0.15.4 create
DarthGigi Jun 5, 2026
213ba4b
chore: update changelog configuration to use changesets-changelog-clean
DarthGigi Jun 5, 2026
57f4987
chore: update deps
DarthGigi Jun 5, 2026
ccf36e4
fix(pet): update progress checks to handle numeric values
DarthGigi Jun 5, 2026
22d455a
fix(mining): remove fossil dust display from Glacite Tunnels section
DarthGigi Jun 5, 2026
a67d2c9
chore: regenerate orval
DarthGigi Jun 5, 2026
d99d081
fix: silence derived_inert and align remote queries with SvelteKit 2.…
DarthGigi Jun 5, 2026
a728a11
fix(newsroom): persist toast dismissal and scope notifier to relevant…
DarthGigi Jun 5, 2026
793cd0e
fix(newsroom): render social embeds as large-image cards
DarthGigi Jun 5, 2026
0c41f8f
chore: version packages (beta) [skip ci]
github-actions[bot] Jun 5, 2026
689ca57
fix: pin kysely version https://github.com/better-auth/better-auth/is…
DarthGigi Jun 5, 2026
ab06f72
feat: migrate svelte config to vite config, possible as of sveltekit …
DarthGigi Jun 5, 2026
46b8f8d
fix: add @sveltejs/load-config to ESLint to load the svelte config
DarthGigi Jun 5, 2026
2985da6
fix(deps): pin kysely for better-auth peer resolution
DarthGigi Jun 5, 2026
66c3b66
fix: pls work
DarthGigi Jun 5, 2026
45a806c
fix: update packs data retrieval to use current query from getPacks
DarthGigi Jun 5, 2026
0f8abb0
Merge pull request #330 from SkyCryptWebsite/dev
DarthGigi Jun 5, 2026
128fe8d
chore: version packages (stable) [skip ci]
github-actions[bot] Jun 5, 2026
1950d4c
Merge pull request #331 from SkyCryptWebsite/changeset-release/prod
DarthGigi Jun 5, 2026
dae560f
chore: sync prod into dev [skip ci]
github-actions[bot] Jun 5, 2026
437d039
chore: cf
inglettronald May 20, 2026
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 .changeset/config.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"$schema": "https://unpkg.com/@changesets/config@3.1.2/schema.json",
"changelog": ["@svitejs/changesets-changelog-github-compact", { "repo": "SkyCryptWebsite/SkyCrypt-Frontend" }],
"changelog": ["changesets-changelog-clean", { "repo": "SkyCryptWebsite/SkyCrypt-Frontend" }],
"commit": false,
"fixed": [],
"linked": [],
Expand Down
29 changes: 28 additions & 1 deletion .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,31 @@ PUBLIC_SENTRY_PROJECT_ID=""
# GO API
PUBLIC_API_URL="http://localhost:8080/api/"
PUBLIC_SERVER_API_URL="http://localhost:8080/api/" # If you're using docker, set this to the name of the backend container, e.g. http://skycrypt-backend-1:8080/api/
SERVER_API_TOKEN="" # Must match the token in the backend config
SERVER_API_TOKEN="" # Must match the token in the backend config

# Drizzle
DATABASE_URL="postgres://root:mysecretpassword@localhost:5432/skycrypt_frontend"

# Better Auth
# For production use 32 characters and generated with high entropy
# https://www.better-auth.com/docs/installation
BETTER_AUTH_SECRET=""
# Discord OAuth
# https://www.better-auth.com/docs/authentication/discord
DISCORD_CLIENT_ID=""
DISCORD_CLIENT_SECRET=""
# MC-ID OAuth
# https://www.better-auth.com/docs/authentication/other-social-providers
# https://mc-id.com
MC_ID_CLIENT_ID=""
MC_ID_CLIENT_SECRET=""
# Patreon API
# https://www.patreon.com/portal/registration/register-clients
PATREON_CLIENT_ID=""
PATREON_CLIENT_SECRET=""

# Payload CMS
PUBLIC_CMS_URL="https://cms.shiiyu.moe"
SERVER_CMS_API_URL="https://cms.shiiyu.moe" # If you're using docker, set this to the name of the CMS container
CMS_API_TOKEN="" # Users API Key generated in CMS admin (Users → API Key tab)
CMS_PREVIEW_TOKEN="" # Must match CMS_PREVIEW_TOKEN in SkyCrypt-CMS .env
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,10 @@ Temporary Items
.svelte-kit/
package

### Cloudflare / Wrangler ###
# Local wrangler/miniflare runtime state (sqlite cache, etc.)
.wrangler/

### VisualStudioCode ###
.vscode/*
!.vscode/settings.json
Expand Down
1 change: 1 addition & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,4 @@ bun.lockb
# Miscellaneous
/static/
.changeset/
/drizzle/
1 change: 0 additions & 1 deletion .prettierrc
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
}
}
],
"svelteStrictMode": true,
"tailwindStylesheet": "./src/app.css",
"tailwindAttributes": ["class", "class:*", "class:name", "payload"],
"tailwindFunctions": ["cn"],
Expand Down
2 changes: 1 addition & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
},
"files.associations": {
"*.css": "tailwindcss",
".env*": "properties"
".env*": "dotenv"
},
"git.autofetch": true,
"svelte.enable-ts-plugin": true,
Expand Down
1 change: 0 additions & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,6 @@ All content injection uses Svelte 5 snippets. No `<slot>` usage.
### Formatting

- Prettier: double quotes, no trailing comma, `printWidth: 999999`, `bracketSameLine: true`
- `svelteStrictMode: true` — enforces Svelte best practices
- Conventional commits enforced via commitlint + simple-git-hooks

## ANTI-PATTERNS
Expand Down
44 changes: 44 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,49 @@
# Changelog

## 3.7.0

### Minor Changes

- Add local newsroom notifications for new CMS posts. _[`#330`](https://github.com/SkyCryptWebsite/SkyCrypt-Frontend/pull/330) [`c2b599e`](https://github.com/SkyCryptWebsite/SkyCrypt-Frontend/commit/c2b599e7e729a61d029f4998f736ae3fa1f0571d) [@DarthGigi](https://github.com/DarthGigi)_
- Add initial work for SkyCrypt accounts _[`#328`](https://github.com/SkyCryptWebsite/SkyCrypt-Frontend/pull/328) [`c077847`](https://github.com/SkyCryptWebsite/SkyCrypt-Frontend/commit/c077847a0fbf13a8aa73122aa28e873189c172f4) [@DarthGigi](https://github.com/DarthGigi)_
- Add the CMS-backed newsroom with post listing, article pages, previews, and sitemap entries. _[`#330`](https://github.com/SkyCryptWebsite/SkyCrypt-Frontend/pull/330) [`a74b033`](https://github.com/SkyCryptWebsite/SkyCrypt-Frontend/commit/a74b0339f66196ae719dbc19c06ab704995e502c) [@DarthGigi](https://github.com/DarthGigi)_

### Patch Changes

- Render newsroom posts and the listing page as `summary_large_image` social embeds with the post's hero image (or a branded graphic on the listing), and stop the homepage SEO defaults from leaking into them. _[`#330`](https://github.com/SkyCryptWebsite/SkyCrypt-Frontend/pull/330) [`793cd0e`](https://github.com/SkyCryptWebsite/SkyCrypt-Frontend/commit/793cd0ef92bdc01a1de274880f5b00487422d59a) [@DarthGigi](https://github.com/DarthGigi)_
- Migrate remote query search calls to the current SvelteKit API. _[`#330`](https://github.com/SkyCryptWebsite/SkyCrypt-Frontend/pull/330) [`31d283e`](https://github.com/SkyCryptWebsite/SkyCrypt-Frontend/commit/31d283ec8c027cb27583a8bb9c026bacf01759a4) [@DarthGigi](https://github.com/DarthGigi)_
- Eliminate `derived_inert` runtime warnings by hoisting `new IsInViewport(...)` out of a `$derived` in `Chip.svelte` and splitting `getThemeIcons(...).current` in the header. Align remaining stats-view remote queries with the post-2.61 docs idiom (`await` for template/context-feed sites; `.current`/`.loading`/`.error` kept only for the loading-button-spinner case). Drop the redundant `getCombined()` in `Sections.svelte`. Make the navbar's tab scroll-on-mount race-resistant and its `IntersectionObserver` `rootMargin` NaN-safe. _[`#330`](https://github.com/SkyCryptWebsite/SkyCrypt-Frontend/pull/330) [`d99d081`](https://github.com/SkyCryptWebsite/SkyCrypt-Frontend/commit/d99d0812879edad2cd6cdcfc5a60e925099c61fc) [@DarthGigi](https://github.com/DarthGigi)_
- Render newsroom rich text with Payload's Lexical HTML converter while preserving SkyCrypt-specific links, uploads, checklists, and relationship nodes. _[`#330`](https://github.com/SkyCryptWebsite/SkyCrypt-Frontend/pull/330) [`0ae985e`](https://github.com/SkyCryptWebsite/SkyCrypt-Frontend/commit/0ae985e966ec97090b050f4d4607f516359bedd5) [@DarthGigi](https://github.com/DarthGigi)_

## 3.7.0-beta.3

### Patch Changes

- Render newsroom posts and the listing page as `summary_large_image` social embeds with the post's hero image (or a branded graphic on the listing), and stop the homepage SEO defaults from leaking into them. _[`793cd0e`](https://github.com/SkyCryptWebsite/SkyCrypt-Frontend/commit/793cd0ef92bdc01a1de274880f5b00487422d59a) [@DarthGigi](https://github.com/DarthGigi)_
- Eliminate `derived_inert` runtime warnings by hoisting `new IsInViewport(...)` out of a `$derived` in `Chip.svelte` and splitting `getThemeIcons(...).current` in the header. Align remaining stats-view remote queries with the post-2.61 docs idiom (`await` for template/context-feed sites; `.current`/`.loading`/`.error` kept only for the loading-button-spinner case). Drop the redundant `getCombined()` in `Sections.svelte`. Make the navbar's tab scroll-on-mount race-resistant and its `IntersectionObserver` `rootMargin` NaN-safe. _[`d99d081`](https://github.com/SkyCryptWebsite/SkyCrypt-Frontend/commit/d99d0812879edad2cd6cdcfc5a60e925099c61fc) [@DarthGigi](https://github.com/DarthGigi)_

## 3.7.0-beta.2

### Patch Changes

- Migrate remote query search calls to the current SvelteKit API. ([`31d283e`](https://github.com/SkyCryptWebsite/SkyCrypt-Frontend/commit/31d283ec8c027cb27583a8bb9c026bacf01759a4))

- Render newsroom rich text with Payload's Lexical HTML converter while preserving SkyCrypt-specific links, uploads, checklists, and relationship nodes. ([`0ae985e`](https://github.com/SkyCryptWebsite/SkyCrypt-Frontend/commit/0ae985e966ec97090b050f4d4607f516359bedd5))

## 3.7.0-beta.1

### Minor Changes

- Add local newsroom notifications for new CMS posts. ([`c2b599e`](https://github.com/SkyCryptWebsite/SkyCrypt-Frontend/commit/c2b599e7e729a61d029f4998f736ae3fa1f0571d))

- Add the CMS-backed newsroom with post listing, article pages, previews, and sitemap entries. ([`a74b033`](https://github.com/SkyCryptWebsite/SkyCrypt-Frontend/commit/a74b0339f66196ae719dbc19c06ab704995e502c))

## 3.7.0-beta.0

### Minor Changes

- Add initial work for SkyCrypt accounts ([#328](https://github.com/SkyCryptWebsite/SkyCrypt-Frontend/pull/328))

## 3.6.2

### Patch Changes
Expand Down
1 change: 1 addition & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ WORKDIR /app
COPY --from=builder /app/build build/
COPY --from=builder /app/node_modules node_modules/
COPY --from=builder /app/static static/
COPY --from=builder /app/drizzle drizzle/
COPY package.json .
COPY pnpm-lock.yaml .

Expand Down
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
> This is a fork of [SkyCryptWebsite/SkyCrypt-Frontend](https://github.com/SkyCryptWebsite/SkyCrypt-Frontend) with minimal changes to support embedding the profile viewer in Lunar Client. To keep this fork up to date with upstream:
>
> ```
> git rebase upstream/dev
> # Resolve any conflicts that occur
> git push origin dev --force-with-lease
> ```

<p align="center">
<picture>
<source media="(prefers-color-scheme: light)" srcset="static/img/logo_black.avif">
Expand Down
16 changes: 16 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
services:
postgres:
image: postgres:18-alpine
container_name: skycrypt-postgres
restart: unless-stopped
ports:
- ${DB_PORT:-5432}:5432
environment:
- POSTGRES_USER=${DB_USER:-root}
- POSTGRES_PASSWORD=${DB_PASSWORD:-mysecretpassword}
- POSTGRES_DB=${DB_NAME:-skycrypt_frontend}
volumes:
- postgres_data:/var/lib/postgresql

volumes:
postgres_data:
12 changes: 12 additions & 0 deletions drizzle.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { defineConfig } from "drizzle-kit";

if (!process.env.DATABASE_URL) throw new Error("DATABASE_URL is not set");

export default defineConfig({
schema: "./src/lib/server/db/schema/index.ts",
out: "./drizzle",
dialect: "postgresql",
dbCredentials: { url: process.env.DATABASE_URL },
verbose: true,
strict: true
});
86 changes: 86 additions & 0 deletions drizzle/0000_dapper_killer_shrike.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
CREATE TABLE "account" (
"id" text PRIMARY KEY NOT NULL,
"account_id" text NOT NULL,
"provider_id" text NOT NULL,
"user_id" text NOT NULL,
"access_token" text,
"refresh_token" text,
"id_token" text,
"access_token_expires_at" timestamp,
"refresh_token_expires_at" timestamp,
"scope" text,
"password" text,
"created_at" timestamp DEFAULT now() NOT NULL,
"updated_at" timestamp NOT NULL
);
--> statement-breakpoint
CREATE TABLE "apikey" (
"id" text PRIMARY KEY NOT NULL,
"config_id" text DEFAULT 'default' NOT NULL,
"name" text,
"start" text,
"reference_id" text NOT NULL,
"prefix" text,
"key" text NOT NULL,
"refill_interval" integer,
"refill_amount" integer,
"last_refill_at" timestamp,
"enabled" boolean DEFAULT true,
"rate_limit_enabled" boolean DEFAULT true,
"rate_limit_time_window" integer DEFAULT 86400000,
"rate_limit_max" integer DEFAULT 10,
"request_count" integer DEFAULT 0,
"remaining" integer,
"last_request" timestamp,
"expires_at" timestamp,
"created_at" timestamp NOT NULL,
"updated_at" timestamp NOT NULL,
"permissions" text,
"metadata" text
);
--> statement-breakpoint
CREATE TABLE "session" (
"id" text PRIMARY KEY NOT NULL,
"expires_at" timestamp NOT NULL,
"token" text NOT NULL,
"created_at" timestamp DEFAULT now() NOT NULL,
"updated_at" timestamp NOT NULL,
"ip_address" text,
"user_agent" text,
"user_id" text NOT NULL,
"impersonated_by" text,
CONSTRAINT "session_token_unique" UNIQUE("token")
);
--> statement-breakpoint
CREATE TABLE "user" (
"id" text PRIMARY KEY NOT NULL,
"name" text NOT NULL,
"email" text NOT NULL,
"email_verified" boolean DEFAULT false NOT NULL,
"image" text,
"created_at" timestamp DEFAULT now() NOT NULL,
"updated_at" timestamp DEFAULT now() NOT NULL,
"role" text,
"banned" boolean DEFAULT false,
"ban_reason" text,
"ban_expires" timestamp,
CONSTRAINT "user_email_unique" UNIQUE("email")
);
--> statement-breakpoint
CREATE TABLE "verification" (
"id" text PRIMARY KEY NOT NULL,
"identifier" text NOT NULL,
"value" text NOT NULL,
"expires_at" timestamp NOT NULL,
"created_at" timestamp DEFAULT now() NOT NULL,
"updated_at" timestamp DEFAULT now() NOT NULL
);
--> statement-breakpoint
ALTER TABLE "account" ADD CONSTRAINT "account_user_id_user_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
ALTER TABLE "session" ADD CONSTRAINT "session_user_id_user_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
CREATE INDEX "account_userId_idx" ON "account" USING btree ("user_id");--> statement-breakpoint
CREATE INDEX "apikey_configId_idx" ON "apikey" USING btree ("config_id");--> statement-breakpoint
CREATE INDEX "apikey_referenceId_idx" ON "apikey" USING btree ("reference_id");--> statement-breakpoint
CREATE INDEX "apikey_key_idx" ON "apikey" USING btree ("key");--> statement-breakpoint
CREATE INDEX "session_userId_idx" ON "session" USING btree ("user_id");--> statement-breakpoint
CREATE INDEX "verification_identifier_idx" ON "verification" USING btree ("identifier");
Loading