-
Notifications
You must be signed in to change notification settings - Fork 178
added clerq #1459
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
ShayPunter
wants to merge
1
commit into
easypanel-io:main
Choose a base branch
from
PunterDigital:template/clerq
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
+181
−0
Open
added clerq #1459
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,57 @@ | ||
| import { | ||
| Output, | ||
| randomPassword, | ||
| randomString, | ||
| Services, | ||
| } from "~templates-utils"; | ||
| import { Input } from "./meta"; | ||
|
|
||
| export function generate(input: Input): Output { | ||
| const services: Services = []; | ||
| const databasePassword = randomPassword(); | ||
| const authSecret = randomString(32); | ||
| const databaseUrl = `postgresql://postgres:${databasePassword}@$(PROJECT_NAME)_${input.appServiceName}-db:5432/$(PROJECT_NAME)`; | ||
|
|
||
| const env = [ | ||
| `DATABASE_URL=${databaseUrl}`, | ||
| `BETTER_AUTH_SECRET=${authSecret}`, | ||
| `BETTER_AUTH_URL=https://$(PRIMARY_DOMAIN)`, | ||
| ]; | ||
|
|
||
| if (input.googleClientId && input.googleClientSecret) { | ||
| env.push(`GOOGLE_CLIENT_ID=${input.googleClientId}`); | ||
| env.push(`GOOGLE_CLIENT_SECRET=${input.googleClientSecret}`); | ||
| } | ||
|
|
||
| if (input.groqApiKey) { | ||
| env.push(`GROQ_API_KEY=${input.groqApiKey}`); | ||
| } | ||
|
|
||
| services.push({ | ||
| type: "app", | ||
| data: { | ||
| serviceName: input.appServiceName, | ||
| source: { | ||
| type: "image", | ||
| image: input.appServiceImage, | ||
| }, | ||
| domains: [ | ||
| { | ||
| host: "$(EASYPANEL_DOMAIN)", | ||
| port: 3000, | ||
| }, | ||
| ], | ||
| env: env.join("\n"), | ||
| }, | ||
| }); | ||
|
|
||
| services.push({ | ||
| type: "postgres", | ||
| data: { | ||
| serviceName: `${input.appServiceName}-db`, | ||
| password: databasePassword, | ||
| }, | ||
| }); | ||
|
|
||
| return { services }; | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,110 @@ | ||
| name: Clerq | ||
| description: | ||
| Clerq is an open-source, self-hostable back office platform that automates the | ||
| administrative work for freelancers and small development studios, so you can | ||
| spend less time on busywork and more time on billable work. It connects the | ||
| whole workflow, from time tracking through invoice generation to payment | ||
| recording, eliminating manual data transfer between tools. Clerq offers time | ||
| tracking with a live timer and manual logging, full client management with | ||
| records and contacts, project management with Kanban and list views, and | ||
| multi-currency invoicing with automatic exchange rates, VAT handling, and | ||
| branded PDF invoices. Expense tracking supports receipt uploads and | ||
| categorization, with optional AI receipt scanning. Built on Next.js, Better | ||
| Auth, and PostgreSQL, Clerq applies its database migrations automatically on | ||
| first boot and keeps you in full control of your data. | ||
| instructions: | | ||
| Required configuration is generated for you: a PostgreSQL database, a random | ||
| BETTER_AUTH_SECRET, and the DATABASE_URL wiring between them. BETTER_AUTH_URL | ||
| is set to your attached domain and is used for authentication | ||
| callbacks/redirects, so deploy with a domain attached. On first boot the | ||
| container applies the database migrations and starts serving, then you can | ||
| create your account from the sign-up page. | ||
|
|
||
| Optional integrations: set Google OAuth (Client ID/Secret) to enable | ||
| "Sign in with Google", and set a Groq API key to enable AI receipt scanning on | ||
| the expenses form. Leave these blank to keep the corresponding buttons hidden. | ||
| changeLog: | ||
| - date: 2026-06-28 | ||
| description: First release | ||
| links: | ||
| - label: Website | ||
| url: https://useclerq.net | ||
| - label: Documentation | ||
| url: https://useclerq.net/docs/self-hosting/easypanel | ||
| - label: GitHub | ||
| url: https://github.com/punterdigital/clerq | ||
| - label: Container registry (GHCR) | ||
| url: https://github.com/punterdigital/clerq/pkgs/container/clerq | ||
| contributors: | ||
| - name: Shay Punter | ||
| url: https://github.com/ShayPunter | ||
| schema: | ||
| type: object | ||
| required: | ||
| - appServiceName | ||
| - appServiceImage | ||
| properties: | ||
| appServiceName: | ||
| type: string | ||
| title: App Service Name | ||
| default: clerq | ||
| appServiceImage: | ||
| type: string | ||
| title: App Service Image | ||
| default: ghcr.io/punterdigital/clerq:1.3.0 | ||
| googleClientId: | ||
| type: string | ||
| title: Google OAuth Client ID (optional) | ||
| description: | ||
| Enables "Sign in with Google". Leave blank to hide the button. | ||
| googleClientSecret: | ||
| type: string | ||
| title: Google OAuth Client Secret (optional) | ||
| description: Required together with the Google OAuth Client ID. | ||
| groqApiKey: | ||
| type: string | ||
| title: Groq API Key (optional) | ||
| description: | ||
| Enables AI receipt scanning on the expenses form. Leave blank to hide | ||
| the button. | ||
| benefits: | ||
| - title: Less back office, more billable work | ||
| description: | ||
| Clerq automates the administrative work for freelancers and small studios, | ||
| connecting time tracking, invoicing, and payments into one workflow so | ||
| nothing is re-entered by hand. | ||
| - title: Self-hosted and in your control | ||
| description: | ||
| Run Clerq on your own infrastructure with a PostgreSQL database you own, | ||
| keeping full control of your client, invoice, and financial data. | ||
| - title: Quick to deploy | ||
| description: | ||
| The published image applies its own database migrations on first boot, so | ||
| the stack is ready to use minutes after deploying. | ||
| features: | ||
| - title: Time tracking | ||
| description: | ||
| Track billable time with a live timer or manual logging, then turn it | ||
| straight into invoices. | ||
| - title: Client & project management | ||
| description: | ||
| Keep full client records and contacts, and organize work with Kanban and | ||
| list views. | ||
| - title: Multi-currency invoicing | ||
| description: | ||
| Generate branded PDF invoices with automatic exchange rates and VAT | ||
| handling across currencies. | ||
| - title: Expense tracking | ||
| description: | ||
| Upload and categorize receipts, with optional AI receipt scanning powered | ||
| by Groq. | ||
| - title: Authentication | ||
| description: | ||
| Email/password sign-in via Better Auth, with optional Google OAuth. | ||
| tags: | ||
| - Invoicing | ||
| - Time Tracking | ||
| - Freelance | ||
| - Self-hosted | ||
| - Next.js | ||
| - PostgreSQL | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I don't really think if this file is needed. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Avoid adding any other link except Github, Website and Docs