Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
99 commits
Select commit Hold shift + click to select a range
109c5f9
Enhancement: Switched from Google Analytics to Vercel Analytics
OverDsh Oct 18, 2025
49743fc
Enhancement: Improved auth toaster
OverDsh Oct 22, 2025
5ebe9b8
[FEAT] Email verification (#6)
OverDsh Oct 22, 2025
d5817ba
Enhancement: Switch to Jetbrains IDE and qodana for code quality anal…
OverDsh Oct 26, 2025
55c66f0
Merge remote-tracking branch 'origin/dev' into dev
OverDsh Oct 26, 2025
224f510
Merge remote-tracking branch 'origin/dev' into dev
OverDsh Oct 26, 2025
c448660
Merge branch 'dev' of https://github.com/rmanager-dev/rmanager-core i…
OverDsh Oct 26, 2025
8348595
Remove Qodana from Github workflow (#10)
OverDsh Nov 2, 2025
1858dba
Refactor: Made Navbar and User Dropdown components to be re-used on t…
OverDsh Nov 2, 2025
d1d71ec
Chore: Add sidebar component from shadcn/ui
OverDsh Nov 2, 2025
790506e
Refactor: Update Navbar component to accept className prop
OverDsh Nov 2, 2025
7f96be3
Refactor: Update UserDropdown component to accept tirggerProps prop
OverDsh Nov 2, 2025
44e532a
Feat: Created the dashboard navbar
OverDsh Nov 2, 2025
fc7a115
Chore: Update to Next.js 16.0.1
OverDsh Nov 2, 2025
7cbef97
Migration from Firebase ecosystem to Better-Auth + Turso (and Drizzle…
OverDsh Nov 10, 2025
48374ba
[FEAT] 2FA Auth (#15)
OverDsh Nov 22, 2025
5c3e3e5
Feat/user settings (#16)
OverDsh Nov 30, 2025
73487b2
Fix: Cleanup unused Dialog folder
OverDsh Nov 30, 2025
5fc7c4c
Security: Patched React2Shell
OverDsh Dec 14, 2025
1712517
Feat/user settings (#22)
OverDsh Dec 19, 2025
ca31306
Merge main into dev
OverDsh Dec 22, 2025
99da13e
Chore: Uninstall old react-query package
OverDsh Dec 22, 2025
d7bc56b
Enhancement: Feature branches now creates a deployment only on PRs. (…
OverDsh Dec 23, 2025
089c46b
Enhancement: Ignore deployment workflows if changes are not affecting
OverDsh Dec 23, 2025
dd7b293
Enhancement: Added README.md to paths-ignore and added paths-ignore to
OverDsh Dec 23, 2025
84adb0b
Potential fix for code scanning alert no. 4: Workflow does not contai…
OverDsh Dec 23, 2025
d6ca003
Fix: PR_NUM env was not corrcetly imported in workflow
OverDsh Dec 23, 2025
906e42c
Resolved merge conflict
OverDsh Dec 23, 2025
71c7f60
[FEAT] Created Password Reset Page (#31)
OverDsh Jan 14, 2026
b00f35e
Enhancement: Disable submit button when forms are invalid
OverDsh Jan 16, 2026
7c97375
[FEAT] Team Creation (#33)
OverDsh Feb 2, 2026
9a1d7fb
feat: create a personal team when user creates an account
OverDsh Feb 3, 2026
a33eef3
fix: scope turso token env to job level and ignore non-code related file
OverDsh Mar 26, 2026
54be705
fix: switched to migration, prevent job cancel to avoid mid-migration
OverDsh Mar 26, 2026
5e5b037
fix: added migration check, disabled job cancelling and fix secrets
OverDsh Mar 26, 2026
4a46da9
fix: switched to migration mode, added migration check and changed
OverDsh Mar 26, 2026
e61f0df
feat: create migrations for team and team_member tables
OverDsh Mar 27, 2026
7cb1405
fix: remove check-migrations test (broken, no fix)
OverDsh Mar 27, 2026
c95c3c5
fix: change vercel token secret handling
OverDsh Mar 27, 2026
b6869dc
feat: renamed databases page to connections
OverDsh Feb 3, 2026
53ed979
feat: create the RobloxCredentialsService
OverDsh Feb 3, 2026
3607d7b
feat: create api routes for RobloxCredentialService
OverDsh Feb 4, 2026
c177be3
refactor: renamed errors.ts to api-utils.ts
OverDsh Feb 4, 2026
8c1313c
refactor: create fetcher util to use in controllers
OverDsh Feb 4, 2026
1ba062d
feat: create frontend hooks for RobloxCredentialService
OverDsh Feb 4, 2026
00d2ece
fix: include roblox credentials table in drizzle schema
OverDsh Feb 4, 2026
7f71882
fix: return mutations in useRobloxCredentialMutations
OverDsh Feb 4, 2026
635ddf8
fix: remove type from RobloxCredentialInfoSchema
OverDsh Feb 4, 2026
9ef82b5
enhancement: remove unused imports
OverDsh Feb 4, 2026
345718e
feat: implement roblox credentials data table in the connections page
OverDsh Feb 4, 2026
8a1e91d
enhancement: close form dialog after running callback
OverDsh Feb 4, 2026
bdf5f22
enhancement: set submit button text to "Link" in RobloxCredentialDialog
OverDsh Feb 4, 2026
2825922
fix: return success: true after rotating roblox credential key
OverDsh Feb 4, 2026
884d063
feat: implement rename and roatate roblox credential
OverDsh Feb 4, 2026
4045d93
enhancement: require roblox credential key to be at least 1 character
OverDsh Feb 4, 2026
1837599
enhancement: add a 5 min stale time to hooks using react query
OverDsh Feb 4, 2026
4886c34
chore: updated radix ui
OverDsh Feb 15, 2026
7b16930
feat: install badge and popover components
OverDsh Feb 15, 2026
782ee38
feat: add refresh credential method, and various QOL improvements
OverDsh Feb 15, 2026
df56e14
feat: implement credential status on the frontend
OverDsh Feb 15, 2026
4e4e9ca
fix: fix request object being cleared by the linter because treated as
OverDsh Feb 15, 2026
e7caf64
enhancement: change time format to be consistent and add View Profile
OverDsh Feb 15, 2026
b072774
fix: add icon to error badge
OverDsh Feb 15, 2026
102c040
enhancement: changed popover style
OverDsh Feb 16, 2026
73df4e1
fix: list roblox credential checked permission for rename roblox
OverDsh Feb 16, 2026
e60ecbc
feat: dynamically show databases/roblox credentials data table based on
OverDsh Feb 16, 2026
c3032e4
fix: fix wrong key lookup for expiration date in the introspection table
OverDsh Mar 5, 2026
ea1cb7e
refactor: move roblox credential status error message to
OverDsh Mar 7, 2026
dd55b60
feat: add database introspection, refresh, and rotate credentials to …
OverDsh Mar 18, 2026
5468c08
feat: add refresh and rotate API routes for databases
OverDsh Mar 18, 2026
697c673
feat: add refresh status and rotate credentials actions to database c…
OverDsh Mar 18, 2026
87f3b90
enhancement: added icons to teams list's dropdown
OverDsh Mar 20, 2026
231489b
feat: add structured logger utility and SSRF URL validator
OverDsh Mar 20, 2026
afc2466
fix: fix IDOR vulnerabilities in _useCredential and _useDatabase
OverDsh Mar 20, 2026
ecfb644
fix: add SSRF protection, structured logging, and surface silent catch
OverDsh Mar 20, 2026
8c48e33
feat: generate migration for roblox_credentials table
OverDsh Mar 27, 2026
4282df4
fix: add VERCEL_URL to better auth trusted origins
OverDsh Mar 27, 2026
6306eee
refactor: move slug creation logic to utils.ts
OverDsh Apr 5, 2026
2d2a346
feat: create the project db schema
OverDsh Apr 5, 2026
66f5f55
feat: create the ProjectService
OverDsh Apr 5, 2026
6898dff
feat: create the ProjectService API routes
OverDsh Apr 5, 2026
88baf87
feat: create the useProject hook and ProjectController
OverDsh Apr 5, 2026
08848a6
feat: create the project table and the create project dialog in the
OverDsh Apr 5, 2026
680948f
feat: create a dummy project homepage (using the useProject hook)
OverDsh Apr 5, 2026
e3b614b
feat: make the project table migrations
OverDsh Apr 5, 2026
b80b233
fix: typo in form description
OverDsh Apr 5, 2026
3cd3bea
fix: incorrect searchBoxTarget in project data table
OverDsh Apr 5, 2026
509cf20
fix: change project's table teamId column name to snake case to match
OverDsh Apr 5, 2026
c581db1
fix: remove unused method params in nameToSlug
OverDsh Apr 5, 2026
4f351e3
fix: in project service, return access denied if the delete or the
OverDsh Apr 5, 2026
53f4545
fix: fixed typo in ProjectSlugTaken API error description
OverDsh Apr 5, 2026
c5f4c08
feat: generate migrations file for teamId column rename in the project's
OverDsh Apr 5, 2026
884c5cd
enhancement: add labels to project data
OverDsh Apr 5, 2026
8585e60
feat: create the project page sidebar
OverDsh Apr 5, 2026
6675676
feat: create the project settings page
OverDsh Apr 5, 2026
38cca92
fix: fix useProject hook incorrectly handling the tanstack query cache
OverDsh Apr 5, 2026
4b2c8c4
feat: redirect user on project delete
OverDsh Apr 5, 2026
baa86c0
fix: typos in card's title/description
OverDsh Apr 5, 2026
09203f6
enhancement: change badge colors
OverDsh Apr 5, 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
9 changes: 6 additions & 3 deletions .github/workflows/database_cleanup.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,10 @@ on:
pull_request:
types:
- closed
paths-ignore:
- .gitignore
- .github/**
- README.md
workflow_dispatch:
inputs:
pr_number:
Expand All @@ -13,6 +17,8 @@ on:
jobs:
cleanup_database:
runs-on: ubuntu-latest
env:
TURSO_API_TOKEN: ${{ secrets.TURSO_API_TOKEN }}
steps:
- name: Install Turso CLI
run: |
Expand All @@ -30,8 +36,5 @@ jobs:
echo "DB_NAME=$DB_NAME" >> $GITHUB_ENV

- name: Destroy Turso Database
env:
TURSO_API_TOKEN: ${{ secrets.TURSO_API_TOKEN }}
DB_NAME: ${{ env.DB_NAME }}
run: |
turso db destroy "$DB_NAME" --yes || echo "Database already gone or never existed"
6 changes: 3 additions & 3 deletions .github/workflows/dev_deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ permissions:

concurrency:
group: deployment-dev
cancel-in-progress: true
cancel-in-progress: false

jobs:
deploy:
Expand All @@ -36,12 +36,12 @@ jobs:
TURSO_DATABASE_URL: ${{ secrets.DEV_DB_URL }}
TURSO_AUTH_TOKEN: ${{ secrets.DEV_DB_TOKEN }}
run: |
npx drizzle-kit push
npx drizzle-kit migrate

- name: Make Development Deployment
env:
VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }}
VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}
VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }}
run: |
npx vercel deploy --target preview --yes --token ${{ secrets.VERCEL_TOKEN }}
npx vercel deploy --target preview --yes --token "$VERCEL_TOKEN"
20 changes: 10 additions & 10 deletions .github/workflows/pr_preview.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ on:
type: number

concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number }}
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.event.inputs.pr_number }}
cancel-in-progress: true

permissions:
Expand Down Expand Up @@ -59,7 +59,7 @@ jobs:
TURSO_API_TOKEN: ${{ secrets.TURSO_API_TOKEN }}
run: |
# Create a branch from the dev database with the generated safe name
turso db create ${{ env.SAFE_BRANCH_NAME }} --from-db dev || true
turso db show ${{ env.SAFE_BRANCH_NAME }} &> /dev/null || turso db create ${{ env.SAFE_BRANCH_NAME }} --from-db dev

- name: Get Database Credentials
env:
Expand All @@ -82,7 +82,7 @@ jobs:
TURSO_AUTH_TOKEN: ${{ env.DB_TOKEN }}
run: |
# Push changes to the created database
npx drizzle-kit push
npx drizzle-kit migrate

- name: Make Preview Deployment
id: vercel-deployment
Expand All @@ -92,17 +92,17 @@ jobs:
VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }}
run: |
# Make a preview deployment with the created database
DEPLOYMENT_URL=$(npx vercel deploy --target preview --token ${{ secrets.VERCEL_TOKEN }} \
--build-env TURSO_DATABASE_URL=${{ env.DB_URL }} \
--build-env TURSO_AUTH_TOKEN=${{ env.DB_TOKEN }} \
--env TURSO_DATABASE_URL=${{ env.DB_URL }} \
--env TURSO_AUTH_TOKEN=${{ env.DB_TOKEN }} \
DEPLOYMENT_URL=$(npx vercel deploy --target preview --token "$VERCEL_TOKEN" \
--build-env TURSO_DATABASE_URL="$DB_URL" \
--build-env TURSO_AUTH_TOKEN="$DB_TOKEN" \
--env TURSO_DATABASE_URL="$DB_URL" \
--env TURSO_AUTH_TOKEN="$DB_TOKEN" \
--yes --logs)

echo "DEPLOYMENT_URL=$DEPLOYMENT_URL" >> $GITHUB_ENV

- name: Comment on PR
if: always()
if: always() && env.PR_NUM != ''
uses: actions/github-script@v8
env:
DEPLOYMENT_URL: ${{ env.DEPLOYMENT_URL }}
Expand All @@ -112,7 +112,7 @@ jobs:
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const {DEPLOYMENT_URL, DEPLOY_STATUS, RUN_URL} = process.env;
const {DEPLOYMENT_URL, DEPLOY_STATUS, RUN_URL, PR_NUM} = process.env;
const status = DEPLOY_STATUS === "success" ? "✅ Ready" : "❌ Failed to deploy";

const body = `### 🚀 Preview Deployment:
Expand Down
6 changes: 5 additions & 1 deletion .github/workflows/production_deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@ on:
- README.md
workflow_dispatch:

concurrency:
group: deployment-production
cancel-in-progress: false

jobs:
deploy:
runs-on: ubuntu-latest
Expand Down Expand Up @@ -37,4 +41,4 @@ jobs:
VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}
VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }}
run: |
npx vercel deploy --prod --yes --token ${{ secrets.VERCEL_TOKEN }}
npx vercel deploy --prod --yes --token "$VERCEL_TOKEN"
24 changes: 24 additions & 0 deletions drizzle/0001_lucky_lucky_pierre.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
ALTER TABLE `database` RENAME COLUMN "user_id" TO "team_id";--> statement-breakpoint
CREATE TABLE `team` (
`id` text PRIMARY KEY NOT NULL,
`slug` text NOT NULL,
`display_name` text NOT NULL,
`name` text NOT NULL,
`owner_id` text NOT NULL,
`created_at` integer DEFAULT (cast(unixepoch('subsecond') * 1000 as integer)) NOT NULL,
FOREIGN KEY (`owner_id`) REFERENCES `user`(`id`) ON UPDATE no action ON DELETE restrict
);
--> statement-breakpoint
CREATE UNIQUE INDEX `team_slug_unique` ON `team` (`slug`);--> statement-breakpoint
CREATE TABLE `team_member` (
`user_id` text NOT NULL,
`team_id` text NOT NULL,
`role` text NOT NULL,
`created_at` integer DEFAULT (cast(unixepoch('subsecond') * 1000 as integer)) NOT NULL,
PRIMARY KEY(`user_id`, `team_id`),
FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON UPDATE no action ON DELETE cascade,
FOREIGN KEY (`team_id`) REFERENCES `team`(`id`) ON UPDATE no action ON DELETE cascade
);
--> statement-breakpoint
ALTER TABLE `database` ADD `created_by` text REFERENCES user(id);--> statement-breakpoint
ALTER TABLE `database` ALTER COLUMN "team_id" TO "team_id" text NOT NULL REFERENCES team(id) ON DELETE cascade ON UPDATE no action;
23 changes: 23 additions & 0 deletions drizzle/0002_daffy_wolf_cub.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
CREATE TABLE `roblox_credentials` (
`id` text PRIMARY KEY NOT NULL,
`team_id` text NOT NULL,
`name` text NOT NULL,
`status` text DEFAULT 'healthy' NOT NULL,
`error_message` text,
`key_ciphertext` text NOT NULL,
`key_iv` text NOT NULL,
`key_tag` text NOT NULL,
`key_owner_roblox_id` integer NOT NULL,
`expiration_date` integer,
`last_used` integer DEFAULT (cast(unixepoch('subsecond') * 1000 as integer)) NOT NULL,
`last_refreshed_at` integer DEFAULT (cast(unixepoch('subsecond') * 1000 as integer)) NOT NULL,
`created_at` integer DEFAULT (cast(unixepoch('subsecond') * 1000 as integer)) NOT NULL,
`created_by` text,
FOREIGN KEY (`team_id`) REFERENCES `team`(`id`) ON UPDATE no action ON DELETE cascade,
FOREIGN KEY (`created_by`) REFERENCES `user`(`id`) ON UPDATE no action ON DELETE set null
);
--> statement-breakpoint
ALTER TABLE `database` ADD `status` text DEFAULT 'healthy' NOT NULL;--> statement-breakpoint
ALTER TABLE `database` ADD `error_message` text;--> statement-breakpoint
ALTER TABLE `database` ADD `last_used` integer DEFAULT (cast(unixepoch('subsecond') * 1000 as integer)) NOT NULL;--> statement-breakpoint
ALTER TABLE `database` ADD `last_refreshed_at` integer DEFAULT (cast(unixepoch('subsecond') * 1000 as integer)) NOT NULL;
10 changes: 10 additions & 0 deletions drizzle/0003_happy_starhawk.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
CREATE TABLE `project` (
`id` text PRIMARY KEY NOT NULL,
`name` text NOT NULL,
`slug` text NOT NULL,
`teamId` text NOT NULL,
`created_at` integer DEFAULT (cast(unixepoch('subsecond') * 1000 as integer)) NOT NULL,
FOREIGN KEY (`teamId`) REFERENCES `team`(`id`) ON UPDATE no action ON DELETE cascade
);
--> statement-breakpoint
CREATE UNIQUE INDEX `project_teamId_slug_unique` ON `project` (`teamId`,`slug`);
4 changes: 4 additions & 0 deletions drizzle/0004_kind_vision.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
ALTER TABLE `project` RENAME COLUMN "teamId" TO "team_id";--> statement-breakpoint
DROP INDEX `project_teamId_slug_unique`;--> statement-breakpoint
CREATE UNIQUE INDEX `project_team_id_slug_unique` ON `project` (`team_id`,`slug`);--> statement-breakpoint
ALTER TABLE `project` ALTER COLUMN "team_id" TO "team_id" text NOT NULL REFERENCES team(id) ON DELETE cascade ON UPDATE no action;
Loading
Loading