Ghost
New
phantomknight287
/
saturn
public
The operating system for your freelance business.
Star
0
Fork
0
Code
Issues
0
Pull requests
0
main
1
branch
Go to file
t
Code
Merge pull request #3 from PhantomKnight287/development
Verified
Browse files at bc73f52
Gurpal Singh committed
7 months ago
· 350 changed files
feat: here comes the money
.agents/skills/better-auth-best-practices/SKILL.md
.agents/skills/create-evlog-adapter/SKILL.md
.agents/skills/create-evlog-adapter/references/adapter-template.md
.agents/skills/create-evlog-adapter/references/test-template.md
.agents/skills/create-evlog-enricher/SKILL.md
.agents/skills/create-evlog-enricher/references/enricher-template.md
.agents/skills/create-evlog-framework-integration/SKILL.md
.agents/skills/email-and-password-best-practices/SKILL.md
.agents/skills/organization-best-practices/SKILL.md
.agents/skills/review-logging-patterns/SKILL.md
.agents/skills/review-logging-patterns/references/code-review.md
.agents/skills/review-logging-patterns/references/drain-pipeline.md
.agents/skills/review-logging-patterns/references/structured-errors.md
.agents/skills/review-logging-patterns/references/wide-events.md
.agents/skills/two-factor-authentication-best-practices/SKILL.md
.agents/skills/ultracite/SKILL.md
.agents/skills/ultracite/references/code-standards.md
.claude/skills/SKILL.md
.claude/skills/better-auth-best-practices
.claude/skills/create-evlog-adapter
.claude/skills/create-evlog-enricher
.claude/skills/create-evlog-framework-integration
.claude/skills/email-and-password-best-practices
.claude/skills/organization-best-practices
.claude/skills/review-logging-patterns
.claude/skills/two-factor-authentication-best-practices
.claude/skills/ultracite
.cspell.json
.cursor/rules/biome.mdc
.devcontainer/Dockerfile
.devcontainer/devcontainer.json
.env.example
.gitattributes
.github/actions/setup/action.yml
.github/workflows/ci.yml
.gitignore
.vscode/settings.json
.zed/settings.json
LICENSE
README.md
biome.jsonc
bun.lock
commitlint.config.ts
components.json
drizzle.config.ts
drizzle/0000_cynical_firelord.sql
drizzle/0001_eager_starjammers.sql
drizzle/0002_talented_whirlwind.sql
drizzle/0003_clear_bishop.sql
drizzle/0004_demonic_justice.sql
drizzle/0005_salty_freak.sql
drizzle/0006_abnormal_thing.sql
drizzle/0007_spotty_jack_flag.sql
drizzle/0008_clean_firebird.sql
drizzle/0009_dizzy_lorna_dane.sql
drizzle/0010_organic_gabe_jones.sql
drizzle/0011_omniscient_vivisector.sql
drizzle/meta/0000_snapshot.json
drizzle/meta/0001_snapshot.json
drizzle/meta/0002_snapshot.json
drizzle/meta/0003_snapshot.json
drizzle/meta/0004_snapshot.json
drizzle/meta/0005_snapshot.json
drizzle/meta/0006_snapshot.json
drizzle/meta/0007_snapshot.json
drizzle/meta/0008_snapshot.json
drizzle/meta/0009_snapshot.json
drizzle/meta/0010_snapshot.json
drizzle/meta/0011_snapshot.json
drizzle/meta/_journal.json
lefthook.yml
next-sitemap.config.ts
next.config.ts
package.json
postcss.config.mjs
public/logo/dark.svg
public/logo/light.svg
public/wordmark/logo_for_mark.png
public/wordmark/text.png
public/wordmark/wordmark.png
skills-lock.json
src/app/(organization)/[org]/cache.ts
src/app/(organization)/[org]/clients/_components/assign-project-dialog.tsx
src/app/(organization)/[org]/clients/_components/clients-table.tsx
src/app/(organization)/[org]/clients/_components/invite-client-dialog.tsx
src/app/(organization)/[org]/clients/_components/pending-invitations-block.tsx
src/app/(organization)/[org]/clients/actions.ts
src/app/(organization)/[org]/clients/common.ts
src/app/(organization)/[org]/clients/page.client.tsx
src/app/(organization)/[org]/clients/page.tsx
src/app/(organization)/[org]/clients/types.ts
src/app/(organization)/[org]/layout.tsx
src/app/(organization)/[org]/nav.client.tsx
src/app/(organization)/[org]/nav.server.tsx
src/app/(organization)/[org]/page.tsx
src/app/(organization)/[org]/projects/_components/create-project-dialog.tsx
src/app/(organization)/[org]/projects/_components/project-banner.tsx
src/app/(organization)/[org]/projects/_components/project-card.tsx
src/app/(organization)/[org]/projects/actions.ts
src/app/(organization)/[org]/projects/common.ts
src/app/(organization)/[org]/projects/opengraph-image.tsx
src/app/(organization)/[org]/projects/page.client.tsx
src/app/(organization)/[org]/projects/page.tsx
src/app/(organization)/[org]/projects/twitter-image.tsx
src/app/(organization)/[org]/projects/types.ts
src/app/(organization)/[org]/settings/actions.ts
src/app/(organization)/[org]/settings/common.ts
src/app/(organization)/[org]/settings/page.client.tsx
src/app/(organization)/[org]/settings/page.tsx
src/app/(organization)/[org]/teams/_components/add-member-dialog.tsx
src/app/(organization)/[org]/teams/_components/create-team-dialog.tsx
src/app/(organization)/[org]/teams/_components/invite-dialog.tsx
src/app/(organization)/[org]/teams/_components/members-section.tsx
src/app/(organization)/[org]/teams/_components/pending-invitations-block.tsx
src/app/(organization)/[org]/teams/_components/rename-team-dialog.tsx
src/app/(organization)/[org]/teams/_components/team-card.tsx
src/app/(organization)/[org]/teams/_components/teams-section.tsx
src/app/(organization)/[org]/teams/actions.ts
src/app/(organization)/[org]/teams/common.ts
src/app/(organization)/[org]/teams/page.client.tsx
src/app/(organization)/[org]/teams/page.tsx
src/app/(organization)/[org]/teams/types.ts
src/app/(project)/[org]/[project]/expenses/_components/category-manager.tsx
src/app/(project)/[org]/[project]/expenses/_components/client-expenses-view.tsx
src/app/(project)/[org]/[project]/expenses/_components/expense-approval.tsx
src/app/(project)/[org]/[project]/expenses/_components/expense-form.tsx
src/app/(project)/[org]/[project]/expenses/_components/expenses-table.tsx
src/app/(project)/[org]/[project]/expenses/actions.ts
src/app/(project)/[org]/[project]/expenses/common.ts
src/app/(project)/[org]/[project]/expenses/page.client.tsx
src/app/(project)/[org]/[project]/expenses/page.tsx
src/app/(project)/[org]/[project]/expenses/types.ts
src/app/(project)/[org]/[project]/invoices/[invoiceId]/page.tsx
src/app/(project)/[org]/[project]/invoices/_components/dispute-invoice-dialog.tsx
src/app/(project)/[org]/[project]/invoices/_components/import-time-entries-dialog.tsx
src/app/(project)/[org]/[project]/invoices/_components/invoice-card.tsx
src/app/(project)/[org]/[project]/invoices/_components/invoice-client-view.tsx
src/app/(project)/[org]/[project]/invoices/_components/invoice-editor/custom-fields-editor.tsx
src/app/(project)/[org]/[project]/invoices/_components/invoice-editor/index.tsx
src/app/(project)/[org]/[project]/invoices/_components/invoice-editor/invoice-item.tsx
src/app/(project)/[org]/[project]/invoices/_components/invoice-editor/items-total.tsx
src/app/(project)/[org]/[project]/invoices/_components/invoice-editor/pdf-preview-pane.tsx
src/app/(project)/[org]/[project]/invoices/_components/invoice-pdf.tsx
src/app/(project)/[org]/[project]/invoices/_components/invoice-picker-dialog.tsx
src/app/(project)/[org]/[project]/invoices/_components/invoice-preview.tsx
src/app/(project)/[org]/[project]/invoices/_components/status-badge.tsx
src/app/(project)/[org]/[project]/invoices/actions.ts
src/app/(project)/[org]/[project]/invoices/common.ts
src/app/(project)/[org]/[project]/invoices/new/page.tsx
src/app/(project)/[org]/[project]/invoices/page.client.tsx
src/app/(project)/[org]/[project]/invoices/page.tsx
src/app/(project)/[org]/[project]/invoices/types.ts
src/app/(project)/[org]/[project]/layout.tsx
src/app/(project)/[org]/[project]/milestones/[milestoneId]/page.client.tsx
src/app/(project)/[org]/[project]/milestones/[milestoneId]/page.tsx
src/app/(project)/[org]/[project]/milestones/_components/create-milestone-dialog.tsx
src/app/(project)/[org]/[project]/milestones/_components/milestone-card.tsx
src/app/(project)/[org]/[project]/milestones/actions.ts
src/app/(project)/[org]/[project]/milestones/common.ts
src/app/(project)/[org]/[project]/milestones/page.client.tsx
src/app/(project)/[org]/[project]/milestones/page.tsx
src/app/(project)/[org]/[project]/nav.server.tsx
src/app/(project)/[org]/[project]/page.tsx
src/app/(project)/[org]/[project]/proposals/[slug]/page.tsx
src/app/(project)/[org]/[project]/proposals/_components/proposal-card.tsx
src/app/(project)/[org]/[project]/proposals/_components/proposal-editor.tsx
src/app/(project)/[org]/[project]/proposals/action.ts
src/app/(project)/[org]/[project]/proposals/common.ts
src/app/(project)/[org]/[project]/proposals/new/page.tsx
src/app/(project)/[org]/[project]/proposals/page.client.tsx
src/app/(project)/[org]/[project]/proposals/page.tsx
src/app/(project)/[org]/[project]/requirements/[slug]/page.tsx
src/app/(project)/[org]/[project]/requirements/_components/badge.tsx
src/app/(project)/[org]/[project]/requirements/_components/change-requests-panel.tsx
src/app/(project)/[org]/[project]/requirements/_components/request-changes-dialog.tsx
src/app/(project)/[org]/[project]/requirements/_components/requirement-card.tsx
src/app/(project)/[org]/[project]/requirements/_components/requirement-editor.tsx
src/app/(project)/[org]/[project]/requirements/_components/threads-panel.tsx
src/app/(project)/[org]/[project]/requirements/action.ts
src/app/(project)/[org]/[project]/requirements/common.ts
src/app/(project)/[org]/[project]/requirements/new/page.tsx
src/app/(project)/[org]/[project]/requirements/page.client.tsx
src/app/(project)/[org]/[project]/requirements/page.tsx
src/app/(project)/[org]/[project]/requirements/types.ts
src/app/(project)/[org]/[project]/team/_components/invite-dialog.tsx
src/app/(project)/[org]/[project]/team/_components/members-section.tsx
src/app/(project)/[org]/[project]/team/_components/pending-invitations.tsx
src/app/(project)/[org]/[project]/team/_components/stakeholders-section.tsx
src/app/(project)/[org]/[project]/team/_components/teams-section.tsx
src/app/(project)/[org]/[project]/team/actions.ts
src/app/(project)/[org]/[project]/team/common.ts
src/app/(project)/[org]/[project]/team/page.client.tsx
src/app/(project)/[org]/[project]/team/page.tsx
src/app/(project)/[org]/[project]/team/types.ts
src/app/(project)/[org]/[project]/timesheets/_components/budget-indicator.tsx
src/app/(project)/[org]/[project]/timesheets/_components/client-reports-view.tsx
src/app/(project)/[org]/[project]/timesheets/_components/member-rates-dialog.tsx
src/app/(project)/[org]/[project]/timesheets/_components/sent-reports-list.tsx
src/app/(project)/[org]/[project]/timesheets/_components/team-entries-table.tsx
src/app/(project)/[org]/[project]/timesheets/_components/time-entry-form.tsx
src/app/(project)/[org]/[project]/timesheets/_components/time-summary-card.tsx
src/app/(project)/[org]/[project]/timesheets/_components/timesheet-approval.tsx
src/app/(project)/[org]/[project]/timesheets/_components/weekly-timesheet.tsx
src/app/(project)/[org]/[project]/timesheets/actions.ts
src/app/(project)/[org]/[project]/timesheets/common.ts
src/app/(project)/[org]/[project]/timesheets/page.client.tsx
src/app/(project)/[org]/[project]/timesheets/page.tsx
src/app/(project)/[org]/[project]/timesheets/types.ts
src/app/(root)/auth/[path]/page.tsx
src/app/(root)/dashboard/page.tsx
src/app/(root)/invite/[id]/actions.ts
src/app/(root)/invite/[id]/page.client.tsx
src/app/(root)/invite/[id]/page.tsx
src/app/(root)/layout.tsx
src/app/(root)/onboarding/common.ts
src/app/(root)/onboarding/page.client.tsx
src/app/(root)/onboarding/page.tsx
src/app/account/[path]/page.tsx
src/app/api/auth/[...all]/route.ts
src/app/api/auth/guest/route.ts
src/app/api/auth/service.ts
src/app/api/expenses/service.ts
src/app/api/files/[...key]/route.ts
src/app/api/invoices/service.ts
src/app/api/media/service.ts
src/app/api/milestones/service.ts
src/app/api/organizations/service.ts
src/app/api/projects/service.ts
src/app/api/proposals/service.ts
src/app/api/requirements/service.ts
src/app/api/signatures/service.ts
src/app/api/teams/service.ts
src/app/api/threads/service.ts
src/app/api/timesheets/service.ts
src/app/api/upload/route.ts
src/app/global-error.tsx
src/app/icon.png
src/app/layout.tsx
src/app/manifest.ts
src/app/not-found.tsx
src/app/opengraph-image.tsx
src/app/page.tsx
src/app/providers.tsx
src/app/twitter-image.tsx
src/components/application-header.tsx
src/components/header.tsx
src/components/icons/saturn-logo.tsx
src/components/image-upload.tsx
src/components/line-items-editor.tsx
src/components/logos/better-auth.tsx
src/components/media-library-dialog.tsx
src/components/mode-toggle.tsx
src/components/nav-user.tsx
src/components/send-to-client-dialog.tsx
src/components/signature-dialog.tsx
src/components/status-badge.tsx
src/components/tailwind-indicator.tsx
src/components/tiptap-editor.tsx
src/components/ui/avatar.tsx
src/components/ui/badge.tsx
src/components/ui/button.tsx
src/components/ui/calendar.tsx
src/components/ui/card.tsx
src/components/ui/checkbox.tsx
src/components/ui/collapsible.tsx
src/components/ui/command.tsx
src/components/ui/currency-selector.tsx
src/components/ui/date-picker.tsx
src/components/ui/dialog.tsx
src/components/ui/dropdown-menu.tsx
src/components/ui/empty.tsx
src/components/ui/field.tsx
src/components/ui/hover-card.tsx
src/components/ui/input.tsx
src/components/ui/label.tsx
src/components/ui/popover.tsx
src/components/ui/select.tsx
src/components/ui/separator.tsx
src/components/ui/sheet.tsx
src/components/ui/sidebar.tsx
src/components/ui/skeleton.tsx
src/components/ui/sonner.tsx
src/components/ui/table.tsx
src/components/ui/tabs.tsx
src/components/ui/textarea.tsx
src/components/ui/toggle.tsx
src/components/ui/tooltip.tsx
src/data/currencies.ts
src/emails/components/layout.tsx
src/emails/templates/budget-threshold-reached.tsx
src/emails/templates/client-added-to-project.tsx
src/emails/templates/expense-approved.tsx
src/emails/templates/expense-rejected.tsx
src/emails/templates/expense-sent-to-client.tsx
src/emails/templates/expense-submitted.tsx
src/emails/templates/invitation.tsx
src/emails/templates/invoice-disputed.tsx
src/emails/templates/invoice-paid.tsx
src/emails/templates/invoice-sent.tsx
src/emails/templates/invoice-unpaid.tsx
src/emails/templates/member-added-to-project.tsx
src/emails/templates/member-role-changed.tsx
src/emails/templates/project-due-date-reminder.tsx
src/emails/templates/proposal-approved.tsx
src/emails/templates/proposal-change-resolved.tsx
src/emails/templates/proposal-changes-requested.tsx
src/emails/templates/proposal-expiring-soon.tsx
src/emails/templates/proposal-sent.tsx
src/emails/templates/requirement-change-requested.tsx
src/emails/templates/requirement-sent-for-sign.tsx
src/emails/templates/requirement-signed.tsx
src/emails/templates/team-assigned-to-project.tsx
src/emails/templates/thread-new-message.tsx
src/emails/templates/timesheet-approved.tsx
src/emails/templates/timesheet-client-responded.tsx
src/emails/templates/timesheet-rejected.tsx
src/emails/templates/timesheet-sent-to-client.tsx
src/emails/templates/timesheet-submitted.tsx
src/env.ts
src/hooks/use-mobile.ts
src/lib/auth-client.ts
src/lib/constants.tsx
src/lib/metadata.ts
src/lib/notifications.ts
src/lib/safe-action.ts
src/lib/utils.ts
src/proxy.ts
src/routes.ts
src/server/auth/index.ts
src/server/auth/permissions.ts
src/server/db/index.ts
src/server/db/schema/auth.ts
src/server/db/schema/base.ts
src/server/db/schema/expense.ts
src/server/db/schema/index.ts
src/server/db/schema/invoice.ts
src/server/db/schema/media.ts
src/server/db/schema/milestone.ts
src/server/db/schema/project.ts
src/server/db/schema/proposal.ts
src/server/db/schema/requirements.ts
src/server/db/schema/thread.ts
src/server/db/schema/timesheet.ts
src/services/analytics.service.ts
src/services/email.service.ts
src/services/s3.service.ts
src/styles/custom.css
src/styles/globals.css
src/types.ts
tsconfig.json