ghcr.io/plushugh/*
docker login ghcr.io -u <username>
# enter your personal access token as password in the prompts
.env
for your use casecp .env.example .env
PUBLIC_POCKETBASE_URL="https://domain.tld/pb"
PUBLIC_BASE_URL="https://domain.tld"
PUBLIC_SENTRY_DSN="sentry_dsn_here"
CADDY_DNS_APIKEY="api_key_here"
docker volume create caddy_data
docker network create web
docker network create caddy-net --internal
docker compose up -d
go to pocketbase instance settings > import collections and import this json
[
{
"id": "_pb_users_auth_",
"name": "recorders",
"type": "auth",
"system": false,
"schema": [
{
"id": "users_name",
"name": "name",
"type": "text",
"system": false,
"required": false,
"unique": false,
"options": {
"min": null,
"max": null,
"pattern": ""
}
}
],
"listRule": "id = @request.auth.id",
"viewRule": "id = @request.auth.id",
"createRule": null,
"updateRule": null,
"deleteRule": null,
"options": {
"allowEmailAuth": true,
"allowOAuth2Auth": true,
"allowUsernameAuth": true,
"exceptEmailDomains": null,
"manageRule": null,
"minPasswordLength": 8,
"onlyEmailDomains": null,
"requireEmail": false
}
},
{
"id": "n4ppq4i2wrlcl2x",
"name": "houses",
"type": "base",
"system": false,
"schema": [
{
"id": "rwp3icda",
"name": "name",
"type": "text",
"system": false,
"required": true,
"unique": false,
"options": {
"min": null,
"max": null,
"pattern": ""
}
},
{
"id": "cnuo8lu7",
"name": "score",
"type": "number",
"system": false,
"required": false,
"unique": false,
"options": {
"min": null,
"max": null
}
},
{
"id": "r703c6si",
"name": "color",
"type": "text",
"system": false,
"required": true,
"unique": false,
"options": {
"min": null,
"max": null,
"pattern": ""
}
}
],
"listRule": "",
"viewRule": "",
"createRule": null,
"updateRule": "",
"deleteRule": null,
"options": {}
},
{
"id": "wvrk4tlcmnozz7n",
"name": "students",
"type": "base",
"system": false,
"schema": [
{
"id": "wnb9q3np",
"name": "name",
"type": "text",
"system": false,
"required": true,
"unique": false,
"options": {
"min": null,
"max": null,
"pattern": ""
}
},
{
"id": "injyhvc1",
"name": "cardNumber",
"type": "text",
"system": false,
"required": true,
"unique": false,
"options": {
"min": null,
"max": null,
"pattern": ""
}
},
{
"id": "9zghfn8g",
"name": "house",
"type": "select",
"system": false,
"required": true,
"unique": false,
"options": {
"maxSelect": 1,
"values": [
"gryffindor",
"slytherin",
"hufflepuff",
"ravenclaw"
]
}
},
{
"id": "1mkfk6jd",
"name": "score",
"type": "number",
"system": false,
"required": false,
"unique": false,
"options": {
"min": null,
"max": null
}
}
],
"listRule": "",
"viewRule": "",
"createRule": null,
"updateRule": "",
"deleteRule": null,
"options": {}
},
{
"id": "g8b6ilyocmrxcdz",
"name": "records",
"type": "base",
"system": false,
"schema": [
{
"id": "c2hiuqu4",
"name": "action",
"type": "select",
"system": false,
"required": true,
"unique": false,
"options": {
"maxSelect": 1,
"values": [
"increase",
"decrease"
]
}
},
{
"id": "ntcwfdq0",
"name": "change",
"type": "number",
"system": false,
"required": true,
"unique": false,
"options": {
"min": null,
"max": null
}
},
{
"id": "qh3it8nq",
"name": "recorder",
"type": "relation",
"system": false,
"required": true,
"unique": false,
"options": {
"collectionId": "_pb_users_auth_",
"cascadeDelete": false,
"maxSelect": 1,
"displayFields": []
}
},
{
"id": "e7dy1ajf",
"name": "student",
"type": "relation",
"system": false,
"required": true,
"unique": false,
"options": {
"collectionId": "wvrk4tlcmnozz7n",
"cascadeDelete": false,
"maxSelect": 1,
"displayFields": []
}
}
],
"listRule": "recorder.id = @request.auth.id",
"viewRule": "recorder.id = @request.auth.id",
"createRule": "recorder.id = @request.auth.id",
"updateRule": null,
"deleteRule": null,
"options": {}
}
]
You can use the convience script ./tools/scripts/seed.ts
to seed houses and students (Bun required)
And the convience script ./tools/scripts/generateSample.ts
to generate students (Bun required)