managarten/uload/backend/pb_schema.json
Till-JS c712a2504a feat: integrate uload and picture, unify package naming
- Add uload project with apps/web structure
  - Reorganize from flat to monorepo structure
  - Remove PocketBase binary and local data
  - Update to pnpm and @uload/web namespace

- Add picture project to monorepo
  - Remove embedded git repository

- Unify all package names to @{project}/{app} schema:
  - @maerchenzauber/* (was @storyteller/*)
  - @manacore/* (was manacore-*, manacore)
  - @manadeck/* (was web, backend, manadeck)
  - @memoro/* (was memoro-web, landing, memoro)
  - @picture/* (already unified)
  - @uload/web

- Add convenient dev scripts for all apps:
  - pnpm dev:{project}:web
  - pnpm dev:{project}:landing
  - pnpm dev:{project}:mobile
  - pnpm dev:{project}:backend

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-25 04:00:36 +01:00

141 lines
2.8 KiB
JSON

{
"collections": [
{
"id": "links",
"name": "links",
"type": "base",
"system": false,
"schema": [
{
"id": "title",
"name": "title",
"type": "text",
"required": true,
"options": {
"min": 1,
"max": 200
}
},
{
"id": "url",
"name": "url",
"type": "url",
"required": true
},
{
"id": "short_code",
"name": "short_code",
"type": "text",
"required": true,
"unique": true,
"options": {
"min": 3,
"max": 50,
"pattern": "^[a-zA-Z0-9_-]+$"
}
},
{
"id": "user",
"name": "user",
"type": "relation",
"required": true,
"options": {
"collectionId": "users",
"cascadeDelete": true,
"maxSelect": 1
}
},
{
"id": "clicks",
"name": "clicks",
"type": "number",
"required": false,
"options": {
"min": 0
}
},
{
"id": "active",
"name": "active",
"type": "bool",
"required": false,
"options": {}
}
],
"listRule": "@request.auth.id = user",
"viewRule": "@request.auth.id = user || active = true",
"createRule": "@request.auth.id != ''",
"updateRule": "@request.auth.id = user",
"deleteRule": "@request.auth.id = user"
},
{
"id": "analytics",
"name": "analytics",
"type": "base",
"system": false,
"schema": [
{
"id": "link",
"name": "link",
"type": "relation",
"required": true,
"options": {
"collectionId": "links",
"cascadeDelete": true,
"maxSelect": 1
}
},
{
"id": "ip",
"name": "ip",
"type": "text",
"required": false
},
{
"id": "user_agent",
"name": "user_agent",
"type": "text",
"required": false
},
{
"id": "referer",
"name": "referer",
"type": "text",
"required": false
},
{
"id": "country",
"name": "country",
"type": "text",
"required": false
},
{
"id": "device",
"name": "device",
"type": "text",
"required": false
}
],
"listRule": "@request.auth.id = link.user",
"viewRule": "@request.auth.id = link.user",
"createRule": "",
"updateRule": null,
"deleteRule": "@request.auth.id = link.user"
}
],
"settings": {
"meta": {
"appName": "uLoad",
"appUrl": "https://your-domain.com",
"hideControls": false,
"senderName": "uLoad",
"senderAddress": "noreply@your-domain.com",
"verificationTemplate": {
"body": "Hello,\n\nPlease verify your email by clicking the link below:\n\n{ACTION_URL}\n\nThanks,\nuLoad Team"
},
"resetPasswordTemplate": {
"body": "Hello,\n\nYou requested to reset your password. Click the link below:\n\n{ACTION_URL}\n\nIf you didn't request this, please ignore this email.\n\nThanks,\nuLoad Team"
}
}
}
}