From a53495f6cdc68f8c6bb387e238dc5b88c120f189 Mon Sep 17 00:00:00 2001
From: jamesread
Date: Thu, 12 Sep 2024 11:09:06 +0100
Subject: [PATCH 04/42] ci: Docker, add build deps for cairo
---
Dockerfile.dev | 3 +++
1 file changed, 3 insertions(+)
diff --git a/Dockerfile.dev b/Dockerfile.dev
index 2594ace2b..fc85c023a 100644
--- a/Dockerfile.dev
+++ b/Dockerfile.dev
@@ -18,6 +18,9 @@ RUN apk add --no-cache \
supervisor=4.2.5-r4 \
pkgconfig \
gcc \
+ pixman-dev \
+ cairo-dev \
+ pango-dev \
make \
build-base
From 24048cf124529ce9572155b62e26eb7d9a1b158d Mon Sep 17 00:00:00 2001
From: Nevo David
Date: Thu, 12 Sep 2024 17:46:17 +0700
Subject: [PATCH 05/42] feat: linkedin page posting
---
.../src/integrations/social/linkedin.page.provider.ts | 3 ++-
.../src/integrations/social/linkedin.provider.ts | 4 ++--
2 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/libraries/nestjs-libraries/src/integrations/social/linkedin.page.provider.ts b/libraries/nestjs-libraries/src/integrations/social/linkedin.page.provider.ts
index 4d8d133db..6b77a387d 100644
--- a/libraries/nestjs-libraries/src/integrations/social/linkedin.page.provider.ts
+++ b/libraries/nestjs-libraries/src/integrations/social/linkedin.page.provider.ts
@@ -29,7 +29,7 @@ export class LinkedinPageProvider
override async refreshToken(
refresh_token: string
): Promise {
- const { access_token: accessToken, refresh_token: refreshToken } = await (
+ const { access_token: accessToken, expires_in, refresh_token: refreshToken } = await (
await fetch('https://www.linkedin.com/oauth/v2/accessToken', {
method: 'POST',
headers: {
@@ -68,6 +68,7 @@ export class LinkedinPageProvider
id,
accessToken,
refreshToken,
+ expiresIn: expires_in,
name,
picture,
username: vanityName,
diff --git a/libraries/nestjs-libraries/src/integrations/social/linkedin.provider.ts b/libraries/nestjs-libraries/src/integrations/social/linkedin.provider.ts
index 7d2471fc1..539d11393 100644
--- a/libraries/nestjs-libraries/src/integrations/social/linkedin.provider.ts
+++ b/libraries/nestjs-libraries/src/integrations/social/linkedin.provider.ts
@@ -1,5 +1,4 @@
import {
- AnalyticsData,
AuthTokenDetails,
PostDetails,
PostResponse,
@@ -19,7 +18,7 @@ export class LinkedinProvider extends SocialAbstract implements SocialProvider {
scopes = ['openid', 'profile', 'w_member_social', 'r_basicprofile'];
async refreshToken(refresh_token: string): Promise {
- const { access_token: accessToken, refresh_token: refreshToken } = await (
+ const { access_token: accessToken, refresh_token: refreshToken, expires_in } = await (
await this.fetch('https://www.linkedin.com/oauth/v2/accessToken', {
method: 'POST',
headers: {
@@ -58,6 +57,7 @@ export class LinkedinProvider extends SocialAbstract implements SocialProvider {
id,
accessToken,
refreshToken,
+ expiresIn: expires_in,
name,
picture,
username: vanityName,
From 21d5d2c8c8ac0912fc5283bcc482c6fe1d6176f1 Mon Sep 17 00:00:00 2001
From: Nevo David
Date: Thu, 12 Sep 2024 22:17:19 +0700
Subject: [PATCH 06/42] feat: fix post now
---
.../src/database/prisma/posts/posts.service.ts | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/libraries/nestjs-libraries/src/database/prisma/posts/posts.service.ts b/libraries/nestjs-libraries/src/database/prisma/posts/posts.service.ts
index 3222e75ee..680045568 100644
--- a/libraries/nestjs-libraries/src/database/prisma/posts/posts.service.ts
+++ b/libraries/nestjs-libraries/src/database/prisma/posts/posts.service.ts
@@ -149,7 +149,11 @@ export class PostsService {
`Error posting on ${firstPost.integration?.providerIdentifier} for ${firstPost?.integration?.name}`,
`An error occurred while posting on ${
firstPost.integration?.providerIdentifier
- } ${!process.env.NODE_ENV || process.env.NODE_ENV === 'development' ? err : ''}`,
+ } ${
+ !process.env.NODE_ENV || process.env.NODE_ENV === 'development'
+ ? err
+ : ''
+ }`,
true
);
}
@@ -390,8 +394,8 @@ export class PostsService {
}
if (
- (body.type === 'schedule' || body.type === 'now') &&
- dayjs(body.date).isAfter(dayjs())
+ body.type === 'now' ||
+ (body.type === 'schedule' && dayjs(body.date).isAfter(dayjs()))
) {
this._workerServiceProducer.emit('post', {
id: posts[0].id,
@@ -535,11 +539,7 @@ export class PostsService {
async generatePostsDraft(orgId: string, body: CreateGeneratedPostsDto) {
const getAllIntegrations = (
await this._integrationService.getIntegrationsList(orgId)
- ).filter(
- (f) =>
- !f.disabled &&
- f.providerIdentifier !== 'reddit'
- );
+ ).filter((f) => !f.disabled && f.providerIdentifier !== 'reddit');
// const posts = chunk(body.posts, getAllIntegrations.length);
const allDates = dayjs()
From 75648cd90bd8748e0a091b6bf52942d91c159c96 Mon Sep 17 00:00:00 2001
From: jamesread
Date: Fri, 13 Sep 2024 00:32:25 +0100
Subject: [PATCH 07/42] docs: extra comments in config, and how to make resend
optional
---
apps/docs/installation/development.mdx | 36 +++++++++++++++++++-------
apps/docs/installation/docker.mdx | 2 +-
2 files changed, 27 insertions(+), 11 deletions(-)
diff --git a/apps/docs/installation/development.mdx b/apps/docs/installation/development.mdx
index c6e5f9321..c456c5d2a 100644
--- a/apps/docs/installation/development.mdx
+++ b/apps/docs/installation/development.mdx
@@ -17,10 +17,13 @@ This guide will ask you to install & configure several services exaplained below
### Prerequisite Cloud Services
-- **[Resend account](https://resend.com)** - for user activation and email notifications.
-- **[Cloudflare R2](https://cloudfalre.com)** - for uploads (optional, can use local machine), and storing account data.
+- **[Cloudflare R2](https://cloudfalre.com)** - for uploads (optional, can use local machine).
- **Social Media API details** - various API keys and secrets (more details later) for services you want to use; reddit, X, Instagram, etc..
+### Optional Cloud Services
+
+- **[Resend account](https://resend.com)** - for user activation and email notifications.
+
### Prerequisite Local Services
- **Node.js** - for running the code! (version 18+)
@@ -78,6 +81,26 @@ FRONTEND_URL="http://localhost:4200"
NEXT_PUBLIC_BACKEND_URL="http://localhost:3000"
BACKEND_INTERNAL_URL="http://localhost:3000"
+# Optional. Your upload directory path if you host your files locally.
+UPLOAD_DIRECTORY="/opt/postiz/uploads/"
+
+# Optional: your upload directory slug if you host your files locally.
+NEXT_PUBLIC_UPLOAD_STATIC_DIRECTORY=""
+
+## This is a dummy key, you must create your own from Resend.
+## If this variable exists, user activation is required.
+## If it is commented out, users are activated automatically.
+#RESEND_API_KEY="RzeTwHijvxvPUerScFcenUZUALuQJzSaGSMJ"
+
+## These are dummy values, you must create your own from Cloudflare.
+## Remember to set your public internet IP address in the allow-list for the API token.
+CLOUDFLARE_ACCOUNT_ID="QhcMSXQyPuMCRpSQcSYdEuTYgHeCXHbu"
+CLOUDFLARE_ACCESS_KEY="dcfCMSuFEeCNfvByUureMZEfxWJmDqZe"
+CLOUDFLARE_SECRET_ACCESS_KEY="zTTMXBmtyLPwHEdpACGHgDgzRTNpTJewiNriLnUS"
+CLOUDFLARE_BUCKETNAME="postiz"
+CLOUDFLARE_BUCKET_URL="https://QhcMSXQyPuMCRpSQcSYdEuTYgHeCXHbu.r2.cloudflarestorage.com/"
+CLOUDFLARE_REGION="auto"
+
# Social Media API Settings
X_API_KEY="Twitter API key for normal oAuth not oAuth2"
X_API_SECRET="Twitter API secret for normal oAuth not oAuth2"
@@ -87,14 +110,7 @@ REDDIT_CLIENT_ID="Reddit Client ID"
REDDIT_CLIENT_SECRET="Linkedin Client Secret"
GITHUB_CLIENT_ID="GitHub Client ID"
GITHUB_CLIENT_SECRET="GitHub Client Secret"
-RESEND_API_KEY="Resend API KEY"
-UPLOAD_DIRECTORY="optional: your upload directory path if you host your files locally"
-NEXT_PUBLIC_UPLOAD_STATIC_DIRECTORY="optional: your upload directory slug if you host your files locally"
-CLOUDFLARE_ACCOUNT_ID="Cloudflare R2 Account ID"
-CLOUDFLARE_ACCESS_KEY="Cloudflare R2 Access Key"
-CLOUDFLARE_SECRET_ACCESS_KEY="Cloudflare R2 Secret Access Key"
-CLOUDFLARE_BUCKETNAME="Cloudflare R2 Bucket Name"
-CLOUDFLARE_BUCKET_URL="Cloudflare R2 Backet URL"
+
# Developer Settings
NX_ADD_PLUGINS=false
diff --git a/apps/docs/installation/docker.mdx b/apps/docs/installation/docker.mdx
index 487bf23c2..2c9484ac3 100644
--- a/apps/docs/installation/docker.mdx
+++ b/apps/docs/installation/docker.mdx
@@ -14,7 +14,7 @@ import DockerEnvvarApps from '/snippets/docker-envvar-apps.mdx';
# Create the container on command line
```bash
-docker create --name postiz -v ./config:/config -p 4200:4200 -p 3000:3000 ghcr.io/postiz/postiz:latest
+docker create --name postiz -v ./config:/config -p 4200:4200 -p 3000:3000 ghcr.io/postiz/postiz-app:latest
```
From a4991b2b10afcf0e2f0d560d5feee16892642178 Mon Sep 17 00:00:00 2001
From: jamesread
Date: Fri, 13 Sep 2024 08:17:21 +0100
Subject: [PATCH 08/42] doc: Typo in cloudflare [skip ci]
---
apps/docs/installation/development.mdx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/apps/docs/installation/development.mdx b/apps/docs/installation/development.mdx
index c456c5d2a..a5b2dc62a 100644
--- a/apps/docs/installation/development.mdx
+++ b/apps/docs/installation/development.mdx
@@ -17,7 +17,7 @@ This guide will ask you to install & configure several services exaplained below
### Prerequisite Cloud Services
-- **[Cloudflare R2](https://cloudfalre.com)** - for uploads (optional, can use local machine).
+- **[Cloudflare R2](https://cloudflare.com)** - for uploads (optional, can use local machine).
- **Social Media API details** - various API keys and secrets (more details later) for services you want to use; reddit, X, Instagram, etc..
### Optional Cloud Services
From 6224634dcb125d08651d8b5217c3881b90a9323d Mon Sep 17 00:00:00 2001
From: jamesread
Date: Fri, 13 Sep 2024 08:49:58 +0100
Subject: [PATCH 09/42] feat: Migrations inside containers, and better default
.env file.
---
.env.example | 90 ++++++++++++++---------
apps/docs/installation/docker-compose.mdx | 2 -
apps/docs/installation/docker.mdx | 13 +++-
apps/docs/snippets/docker-database.mdx | 6 --
var/docker/entrypoint.sh | 3 +
5 files changed, 67 insertions(+), 47 deletions(-)
delete mode 100644 apps/docs/snippets/docker-database.mdx
diff --git a/.env.example b/.env.example
index d06208b63..7528cf446 100644
--- a/.env.example
+++ b/.env.example
@@ -1,38 +1,44 @@
-DATABASE_URL=""
-REDIS_URL=""
-UPLOAD_DIRECTORY=""
-NEXT_PUBLIC_UPLOAD_STATIC_DIRECTORY=""
-STRIPE_PUBLISHABLE_KEY=""
-STRIPE_SECRET_KEY=""
-STRIPE_SIGNING_KEY=""
-JWT_SECRET=""
-FRONTEND_URL=""
-MAIN_URL=""
-NEXT_PUBLIC_BACKEND_URL=""
-BACKEND_INTERNAL_URL=""
-X_API_KEY=""
-X_API_SECRET=""
-X_CLIENT=""
-X_SECRET=""
-LINKEDIN_CLIENT_ID=""
-LINKEDIN_CLIENT_SECRET=""
-REDDIT_CLIENT_ID=""
-REDDIT_CLIENT_SECRET=""
-GITHUB_CLIENT_ID=""
-GITHUB_CLIENT_SECRET=""
-RESEND_API_KEY=""
+# Required Settings
+DATABASE_URL="postgresql://postiz-user:postiz-password@localhost:5432/postiz-db-local"
+REDIS_URL="redis://localhost:6379"
+JWT_SECRET="random string for your JWT secret, make it long"
+FRONTEND_URL="http://localhost:4200"
+NEXT_PUBLIC_BACKEND_URL="http://localhost:3000"
+BACKEND_INTERNAL_URL="http://localhost:3000"
+
+# Optional. Your upload directory path if you host your files locally.
+UPLOAD_DIRECTORY="/opt/postiz/uploads/"
+
+# Optional: your upload directory slug if you host your files locally.
+NEXT_PUBLIC_UPLOAD_STATIC_DIRECTORY="/opt/postiz/uploads/"
+
+## This is a dummy key, you must create your own from Resend.
+## If this variable exists, user activation is required.
+## If it is commented out, users are activated automatically.
+#RESEND_API_KEY="RzeTwHijvxvPUerScFcenUZUALuQJzSaGSMJ"
+#EMAIL_FROM_ADDRESS=""
+#EMAIL_FROM_NAME=""
+
+## These are dummy values, you must create your own from Cloudflare.
+## Remember to set your public internet IP address in the allow-list for the API token.
+CLOUDFLARE_ACCOUNT_ID="QhcMSXQyPuMCRpSQcSYdEuTYgHeCXHbu"
+CLOUDFLARE_ACCESS_KEY="dcfCMSuFEeCNfvByUureMZEfxWJmDqZe"
+CLOUDFLARE_SECRET_ACCESS_KEY="zTTMXBmtyLPwHEdpACGHgDgzRTNpTJewiNriLnUS"
+CLOUDFLARE_BUCKETNAME="postiz"
+CLOUDFLARE_BUCKET_URL="https://QhcMSXQyPuMCRpSQcSYdEuTYgHeCXHbu.r2.cloudflarestorage.com/"
+CLOUDFLARE_REGION="auto"
+
+# Social Media API Settings
+X_API_KEY="Twitter API key for normal oAuth not oAuth2"
+X_API_SECRET="Twitter API secret for normal oAuth not oAuth2"
+LINKEDIN_CLIENT_ID="Linkedin Client ID"
+LINKEDIN_CLIENT_SECRET="Linkedin Client Secret"
+REDDIT_CLIENT_ID="Reddit Client ID"
+REDDIT_CLIENT_SECRET="Linkedin Client Secret"
+GITHUB_CLIENT_ID="GitHub Client ID"
+GITHUB_CLIENT_SECRET="GitHub Client Secret"
BEEHIIVE_API_KEY=""
BEEHIIVE_PUBLICATION_ID=""
-NX_ADD_PLUGINS=false
-CLOUDFLARE_ACCOUNT_ID=""
-CLOUDFLARE_ACCESS_KEY=""
-CLOUDFLARE_SECRET_ACCESS_KEY=""
-CLOUDFLARE_BUCKETNAME=""
-CLOUDFLARE_BUCKET_URL=""
-CLOUDFLARE_REGION=""
-FEE_AMOUNT=0.05
-OPENAI_API_KEY=""
-NEXT_PUBLIC_DISCORD_SUPPORT=""
THREADS_APP_ID=""
THREADS_APP_SECRET=""
FACEBOOK_APP_ID=""
@@ -45,7 +51,19 @@ PINTEREST_CLIENT_ID=""
PINTEREST_CLIENT_SECRET=""
DRIBBBLE_CLIENT_ID=""
DRIBBBLE_CLIENT_SECRET=""
-IS_GENERAL="true"
-EMAIL_FROM_ADDRESS=""
-EMAIL_FROM_NAME=""
+
+
+# Misc Settings
+OPENAI_API_KEY=""
+NEXT_PUBLIC_DISCORD_SUPPORT=""
NEXT_PUBLIC_POLOTNO="Polotno key for the gallery"
+
+# Payment settings
+FEE_AMOUNT=0.05
+STRIPE_PUBLISHABLE_KEY=""
+STRIPE_SECRET_KEY=""
+STRIPE_SIGNING_KEY=""
+
+# Developer Settings
+NX_ADD_PLUGINS=false
+IS_GENERAL="true" # required for now
diff --git a/apps/docs/installation/docker-compose.mdx b/apps/docs/installation/docker-compose.mdx
index 21b01799f..d4e009b7d 100644
--- a/apps/docs/installation/docker-compose.mdx
+++ b/apps/docs/installation/docker-compose.mdx
@@ -3,11 +3,9 @@ title: Docker Compose
---
import EarlyDoc from '/snippets/earlydoc.mdx';
-import DockerDatabase from '/snippets/docker-database.mdx';
import DockerEnvvarApps from '/snippets/docker-envvar-apps.mdx';
-
# Example `docker-compose.yml` file
diff --git a/apps/docs/installation/docker.mdx b/apps/docs/installation/docker.mdx
index 2c9484ac3..154cdea60 100644
--- a/apps/docs/installation/docker.mdx
+++ b/apps/docs/installation/docker.mdx
@@ -3,18 +3,25 @@ title: Docker
---
import EarlyDoc from '/snippets/earlydoc.mdx';
-import DockerDatabase from '/snippets/docker-database.mdx';
import DockerEnvvarApps from '/snippets/docker-envvar-apps.mdx';
-
+# Set environment variables
+Postiz configuration is entirely via environment variables for now. You might be used to setting environment variables when starting containers,
+however postiz needs a LOT of environment variables, so setting these on command line or in a docker-compose is probably not practical for long
+term maintainability.
+
+It is recommended to use a `.env` file, which the Postiz containers look for in /config. Docker will automatically create this file for you on a
+docker volume the first time you start up Postiz.
+
+The default .env file can be found here; [example .env file](https://raw.githubusercontent.com/gitroomhq/postiz-app/main/.env.example)
# Create the container on command line
```bash
-docker create --name postiz -v ./config:/config -p 4200:4200 -p 3000:3000 ghcr.io/postiz/postiz-app:latest
+docker create --name postiz -v ./config:/config -p 4200:4200 -p 3000:3000 ghcr.io/gitroomhq/postiz-app:latest
```
diff --git a/apps/docs/snippets/docker-database.mdx b/apps/docs/snippets/docker-database.mdx
deleted file mode 100644
index babd2cf5b..000000000
--- a/apps/docs/snippets/docker-database.mdx
+++ /dev/null
@@ -1,6 +0,0 @@
-
-The container images do not yet provide automatic database "installation"
-(migrations). This must be done manually outside of the docker containers for now.
-
-This is being worked on with a high priority.
-
diff --git a/var/docker/entrypoint.sh b/var/docker/entrypoint.sh
index 2e98950e4..f896d960a 100755
--- a/var/docker/entrypoint.sh
+++ b/var/docker/entrypoint.sh
@@ -15,6 +15,9 @@ if [[ "$POSTIZ_APPS" -eq "" ]]; then
POSTIZ_APPS="frontend workers cron backend"
fi
+echo "Running database migrations"
+npm run prisma-db-push
+
mkdir -p /etc/supervisor.d/
if [[ "$POSTIZ_APPS" == *"frontend"* ]]; then
From b735a7ce8e86b08be8f26bb9a10257a05e4a334b Mon Sep 17 00:00:00 2001
From: jamesread
Date: Fri, 13 Sep 2024 09:00:38 +0100
Subject: [PATCH 10/42] doc: Cleanup a few default config keys
---
.env.example | 20 +++++++++++---------
1 file changed, 11 insertions(+), 9 deletions(-)
diff --git a/.env.example b/.env.example
index 7528cf446..7ef00fa58 100644
--- a/.env.example
+++ b/.env.example
@@ -29,14 +29,16 @@ CLOUDFLARE_BUCKET_URL="https://QhcMSXQyPuMCRpSQcSYdEuTYgHeCXHbu.r2.cloudflaresto
CLOUDFLARE_REGION="auto"
# Social Media API Settings
-X_API_KEY="Twitter API key for normal oAuth not oAuth2"
-X_API_SECRET="Twitter API secret for normal oAuth not oAuth2"
-LINKEDIN_CLIENT_ID="Linkedin Client ID"
-LINKEDIN_CLIENT_SECRET="Linkedin Client Secret"
-REDDIT_CLIENT_ID="Reddit Client ID"
-REDDIT_CLIENT_SECRET="Linkedin Client Secret"
-GITHUB_CLIENT_ID="GitHub Client ID"
-GITHUB_CLIENT_SECRET="GitHub Client Secret"
+X_API_KEY=""
+X_API_SECRET=""
+X_CLIENT=""
+X_SECRET=""
+LINKEDIN_CLIENT_ID=""
+LINKEDIN_CLIENT_SECRET=""
+REDDIT_CLIENT_ID=""
+REDDIT_CLIENT_SECRET=""
+GITHUB_CLIENT_ID=""
+GITHUB_CLIENT_SECRET=""
BEEHIIVE_API_KEY=""
BEEHIIVE_PUBLICATION_ID=""
THREADS_APP_ID=""
@@ -52,7 +54,6 @@ PINTEREST_CLIENT_SECRET=""
DRIBBBLE_CLIENT_ID=""
DRIBBBLE_CLIENT_SECRET=""
-
# Misc Settings
OPENAI_API_KEY=""
NEXT_PUBLIC_DISCORD_SUPPORT=""
@@ -63,6 +64,7 @@ FEE_AMOUNT=0.05
STRIPE_PUBLISHABLE_KEY=""
STRIPE_SECRET_KEY=""
STRIPE_SIGNING_KEY=""
+STRIPE_SIGNING_KEY_CONNECT=""
# Developer Settings
NX_ADD_PLUGINS=false
From 1498f04ba6f856099ac2f8dea73b626cf6bec883 Mon Sep 17 00:00:00 2001
From: jamesread
Date: Fri, 13 Sep 2024 20:37:16 +0100
Subject: [PATCH 11/42] ci: Docker frontend startup, move packages to
devcontainer, and config to postiz.env
---
Dockerfile.dev | 24 +++++++++++++++---------
var/docker/entrypoint.sh | 2 +-
var/docker/supervisord/frontend.conf | 4 ++--
3 files changed, 18 insertions(+), 12 deletions(-)
diff --git a/Dockerfile.dev b/Dockerfile.dev
index fc85c023a..d43b45afa 100644
--- a/Dockerfile.dev
+++ b/Dockerfile.dev
@@ -15,14 +15,7 @@ ENV NEXT_TELEMETRY_DISABLED=1
RUN apk add --no-cache \
bash=5.2.21-r0 \
- supervisor=4.2.5-r4 \
- pkgconfig \
- gcc \
- pixman-dev \
- cairo-dev \
- pango-dev \
- make \
- build-base
+ supervisor=4.2.5-r4
WORKDIR /app
@@ -32,7 +25,7 @@ EXPOSE 3000
COPY var/docker/entrypoint.sh /app/entrypoint.sh
COPY var/docker/supervisord.conf /etc/supervisord.conf
COPY var/docker/supervisord /app/supervisord_available_configs/
-COPY .env.example /config/.env
+COPY .env.example /config/postiz.env
VOLUME /config
@@ -43,12 +36,23 @@ ENTRYPOINT ["/app/entrypoint.sh"]
# Builder image
FROM base AS devcontainer
+RUN apk add --no-cache \
+ pkgconfig \
+ gcc \
+ pixman-dev \
+ cairo-dev \
+ pango-dev \
+ make \
+ build-base
+
COPY nx.json tsconfig.base.json package.json package-lock.json /app/
COPY apps /app/apps/
COPY libraries /app/libraries/
RUN npm ci --no-fund && npx nx run-many --target=build --projects=frontend,backend,workers,cron
+VOLUME /config
+
LABEL org.opencontainers.image.title="Postiz App (DevContainer)"
# Output image
@@ -59,5 +63,7 @@ COPY --from=devcontainer /app/dist/ /app/dist/
COPY package.json nx.json /app/
+VOLUME /config
+
## Labels at the bottom, because CI will eventually add dates, commit hashes, etc.
LABEL org.opencontainers.image.title="Postiz App (Production)"
diff --git a/var/docker/entrypoint.sh b/var/docker/entrypoint.sh
index f896d960a..f79c8f42a 100755
--- a/var/docker/entrypoint.sh
+++ b/var/docker/entrypoint.sh
@@ -7,7 +7,7 @@ if [[ "$SKIP_CONFIG_CHECK" != "true" ]]; then
echo "ERROR: No .env file found in /config/.env"
fi
- ln -sf /config/.env /app/.env
+ ln -sf /config/postiz.env /app/.env
fi
if [[ "$POSTIZ_APPS" -eq "" ]]; then
diff --git a/var/docker/supervisord/frontend.conf b/var/docker/supervisord/frontend.conf
index c157a2050..53c03a6f5 100644
--- a/var/docker/supervisord/frontend.conf
+++ b/var/docker/supervisord/frontend.conf
@@ -1,6 +1,6 @@
[program:frontend]
-directory=/app
-command=npm run start:prod:frontend
+directory=/app/dist/apps/frontend
+command=npx next start
autostart=true
autorestart=false
redirect_stderr=true
From a04b96d42dd7f48346933f67bacc08e146af3c45 Mon Sep 17 00:00:00 2001
From: Nevo David
Date: Sat, 14 Sep 2024 18:54:18 +0700
Subject: [PATCH 12/42] feat: run process individually for dev
---
package.json | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/package.json b/package.json
index 737151659..0b4703b38 100644
--- a/package.json
+++ b/package.json
@@ -10,6 +10,10 @@
"dev:stripe": "npx concurrently \"stripe listen --forward-to localhost:3000/stripe\" \"npm run dev\"",
"build": "npx nx run-many --target=build --projects=frontend,backend,workers,cron",
"build:frontend": "npx nx run frontend:build:production",
+ "dev:frontend": "npx nx run frontend:serve:development",
+ "dev:backend": "npx nx run backend:serve:development",
+ "dev:workers": "npx nx run workers:serve:development",
+ "dev:cron": "npx nx run cron:serve:development",
"start:prod": "node dist/apps/backend/main.js",
"start:prod:frontend": "nx run frontend:serve:production",
"start:prod:workers": "node dist/apps/workers/main.js",
From 2ffa3ddbd1c6f4be11858f40b4ab90a463db6e7b Mon Sep 17 00:00:00 2001
From: jamesread
Date: Sat, 14 Sep 2024 20:23:10 +0100
Subject: [PATCH 13/42] docker: Copy config, instead of symlink. This means
config is a standard file, and changes wont affect running containers.
---
var/docker/entrypoint.sh | 12 +++++++-----
1 file changed, 7 insertions(+), 5 deletions(-)
diff --git a/var/docker/entrypoint.sh b/var/docker/entrypoint.sh
index f79c8f42a..526ca6f32 100755
--- a/var/docker/entrypoint.sh
+++ b/var/docker/entrypoint.sh
@@ -1,21 +1,23 @@
#!/bin/bash
+set -o xtrace
+
if [[ "$SKIP_CONFIG_CHECK" != "true" ]]; then
- echo "symlinking /config/.env into /app/.env"
+ echo "Entrypoint: Copying /config/postiz.env into /app/.env"
if [ ! -f /config/.env ]; then
- echo "ERROR: No .env file found in /config/.env"
+ echo "Entrypoint: WARNING: No .env file found in /config/postiz.env"
fi
- ln -sf /config/postiz.env /app/.env
+ cp -vf /config/postiz.env /app/.env
fi
if [[ "$POSTIZ_APPS" -eq "" ]]; then
- echo "POSTIZ_APPS is not set, starting everything!"
+ echo "Entrypoint: POSTIZ_APPS is not set, starting everything!"
POSTIZ_APPS="frontend workers cron backend"
fi
-echo "Running database migrations"
+echo "Entrypoint: Running database migrations"
npm run prisma-db-push
mkdir -p /etc/supervisor.d/
From 4552f88950739e776786c38be335f5445c3e7f84 Mon Sep 17 00:00:00 2001
From: jamesread
Date: Sat, 14 Sep 2024 21:50:20 +0100
Subject: [PATCH 14/42] doc: Improve config docs
---
.env.example | 36 ++++++++++++--------
apps/docs/installation/development.mdx | 4 +++
apps/docs/installation/docker-compose.mdx | 14 +++++++-
apps/docs/installation/docker.mdx | 32 +++++++++++------
apps/docs/mint.json | 6 ++++
apps/docs/snippets/docker-envvar-apps.mdx | 13 ++++---
apps/docs/snippets/docker-envvar-general.mdx | 15 ++++++++
7 files changed, 90 insertions(+), 30 deletions(-)
create mode 100644 apps/docs/snippets/docker-envvar-general.mdx
diff --git a/.env.example b/.env.example
index 7ef00fa58..5b70c78c2 100644
--- a/.env.example
+++ b/.env.example
@@ -1,4 +1,6 @@
-# Required Settings
+# Configuration reference: http://docs.postiz.com/configuration/reference
+
+# === Required Settings
DATABASE_URL="postgresql://postiz-user:postiz-password@localhost:5432/postiz-db-local"
REDIS_URL="redis://localhost:6379"
JWT_SECRET="random string for your JWT secret, make it long"
@@ -6,11 +8,19 @@ FRONTEND_URL="http://localhost:4200"
NEXT_PUBLIC_BACKEND_URL="http://localhost:3000"
BACKEND_INTERNAL_URL="http://localhost:3000"
-# Optional. Your upload directory path if you host your files locally.
-UPLOAD_DIRECTORY="/opt/postiz/uploads/"
+## These are dummy values, you must create your own from Cloudflare.
+## Remember to set your public internet IP address in the allow-list for the API token.
+##
+## Cloudflare is currently required to save things like social media avatars for accounts.
+CLOUDFLARE_ACCOUNT_ID="QhcMSXQyPuMCRpSQcSYdEuTYgHeCXHbu"
+CLOUDFLARE_ACCESS_KEY="dcfCMSuFEeCNfvByUureMZEfxWJmDqZe"
+CLOUDFLARE_SECRET_ACCESS_KEY="zTTMXBmtyLPwHEdpACGHgDgzRTNpTJewiNriLnUS"
+CLOUDFLARE_BUCKETNAME="postiz"
+CLOUDFLARE_BUCKET_URL="https://QhcMSXQyPuMCRpSQcSYdEuTYgHeCXHbu.r2.cloudflarestorage.com/"
+CLOUDFLARE_REGION="auto"
+
-# Optional: your upload directory slug if you host your files locally.
-NEXT_PUBLIC_UPLOAD_STATIC_DIRECTORY="/opt/postiz/uploads/"
+# === Common optional Settings
## This is a dummy key, you must create your own from Resend.
## If this variable exists, user activation is required.
@@ -19,14 +29,12 @@ NEXT_PUBLIC_UPLOAD_STATIC_DIRECTORY="/opt/postiz/uploads/"
#EMAIL_FROM_ADDRESS=""
#EMAIL_FROM_NAME=""
-## These are dummy values, you must create your own from Cloudflare.
-## Remember to set your public internet IP address in the allow-list for the API token.
-CLOUDFLARE_ACCOUNT_ID="QhcMSXQyPuMCRpSQcSYdEuTYgHeCXHbu"
-CLOUDFLARE_ACCESS_KEY="dcfCMSuFEeCNfvByUureMZEfxWJmDqZe"
-CLOUDFLARE_SECRET_ACCESS_KEY="zTTMXBmtyLPwHEdpACGHgDgzRTNpTJewiNriLnUS"
-CLOUDFLARE_BUCKETNAME="postiz"
-CLOUDFLARE_BUCKET_URL="https://QhcMSXQyPuMCRpSQcSYdEuTYgHeCXHbu.r2.cloudflarestorage.com/"
-CLOUDFLARE_REGION="auto"
+# Your upload directory path if you host your files locally, otherwise Cloudflare will be used.
+#UPLOAD_DIRECTORY="/opt/postiz/uploads/"
+
+# Your upload directory path if you host your files locally, otherwise Cloudflare will be used.
+#NEXT_PUBLIC_UPLOAD_STATIC_DIRECTORY="/opt/postiz/uploads/"
+
# Social Media API Settings
X_API_KEY=""
@@ -57,7 +65,7 @@ DRIBBBLE_CLIENT_SECRET=""
# Misc Settings
OPENAI_API_KEY=""
NEXT_PUBLIC_DISCORD_SUPPORT=""
-NEXT_PUBLIC_POLOTNO="Polotno key for the gallery"
+NEXT_PUBLIC_POLOTNO=""
# Payment settings
FEE_AMOUNT=0.05
diff --git a/apps/docs/installation/development.mdx b/apps/docs/installation/development.mdx
index a5b2dc62a..015b9bf18 100644
--- a/apps/docs/installation/development.mdx
+++ b/apps/docs/installation/development.mdx
@@ -72,6 +72,10 @@ git clone https://github.com/gitroomhq/gitroom
Copy the `.env.example` file to `.env` and fill in the values
+An example file of the most used configuration settings can be found here; [example postiz.env file](https://raw.githubusercontent.com/gitroomhq/postiz-app/main/.env.example)
+
+There is also a [configuration reference](/configuration/reference) page that goes into more detail.
+
```bash .env
# Required Settings
DATABASE_URL="postgresql://postiz-user:postiz-password@localhost:5432/postiz-db-local"
diff --git a/apps/docs/installation/docker-compose.mdx b/apps/docs/installation/docker-compose.mdx
index d4e009b7d..8c422f018 100644
--- a/apps/docs/installation/docker-compose.mdx
+++ b/apps/docs/installation/docker-compose.mdx
@@ -4,9 +4,14 @@ title: Docker Compose
import EarlyDoc from '/snippets/earlydoc.mdx';
import DockerEnvvarApps from '/snippets/docker-envvar-apps.mdx';
+import DockerEnvvarGeneral from '/snippets/docker-envvar-general.mdx';
+
+
+The container images will copy a file called `/config/postiz.env` to `/apps/.env` on startup.
+
# Example `docker-compose.yml` file
```yaml
@@ -15,8 +20,15 @@ services:
image: ghcr.io/gitroomhq/postiz-app:latest
container_name: postiz
restart: always
+ environment: # If you want to specify the variables in your compose file.
+ - DATABASE_URL="postgresql://postiz-user:postiz-password@localhost:5432/postiz-db-local"
+ - REDIS_URL="redis://localhost:6379"
+ - JWT_SECRET="random string for your JWT secret, make it long"
+ - FRONTEND_URL="http://localhost:4200"
+ - NEXT_PUBLIC_BACKEND_URL="http://localhost:3000"
+ - BACKEND_INTERNAL_URL="http://localhost:3000"
volumes:
- - ./config:/config/ # Should contain your .env file
+ - ./config:/config/ # If you want to specify the variables in your `postiz.env` file.
ports:
- 4200:4200
- 3000:3000
diff --git a/apps/docs/installation/docker.mdx b/apps/docs/installation/docker.mdx
index 154cdea60..3ba5228b7 100644
--- a/apps/docs/installation/docker.mdx
+++ b/apps/docs/installation/docker.mdx
@@ -4,24 +4,36 @@ title: Docker
import EarlyDoc from '/snippets/earlydoc.mdx';
import DockerEnvvarApps from '/snippets/docker-envvar-apps.mdx';
+import DockerEnvvarGeneral from '/snippets/docker-envvar-general.mdx';
-# Set environment variables
+
-Postiz configuration is entirely via environment variables for now. You might be used to setting environment variables when starting containers,
-however postiz needs a LOT of environment variables, so setting these on command line or in a docker-compose is probably not practical for long
-term maintainability.
+The container images will copy a file called `/config/postiz.env` to `/apps/.env` on startup.
-It is recommended to use a `.env` file, which the Postiz containers look for in /config. Docker will automatically create this file for you on a
-docker volume the first time you start up Postiz.
+# Create the container on command line
-The default .env file can be found here; [example .env file](https://raw.githubusercontent.com/gitroomhq/postiz-app/main/.env.example)
+It is recommended to have a local directory where you save your `postiz.env` file, such as `/myContainers/postiz/config`, which is mounted as a volume.
-# Create the container on command line
+```bash Using a configuration volume
+docker create --name postiz -v /myContainers/postiz/config:/config -p 4200:4200 -p 3000:3000 ghcr.io/gitroomhq/postiz-app:latest
+```
-```bash
-docker create --name postiz -v ./config:/config -p 4200:4200 -p 3000:3000 ghcr.io/gitroomhq/postiz-app:latest
+Alternatively, you can specify the variables one by one at creation time. This approach is not recommended
+simply because it's a pain to manage, and sensitive keys get stored with the container definition, which is bad practice.
+
+```bash At creation-time (not recommended)
+docker create --name postiz \
+ -e DATABASE_URL=postgres://... \
+ -e REDIS_URL=redis:// \
+ -e JWT_SECRET \
+ ... \
+ -p 4200:4200 \
+ -p 3000:3000 \
+ ghcr.io/gitroomhq/postiz-app:latest
```
+
+
diff --git a/apps/docs/mint.json b/apps/docs/mint.json
index 7fa169e09..4b375a4d9 100644
--- a/apps/docs/mint.json
+++ b/apps/docs/mint.json
@@ -70,6 +70,12 @@
"installation/kubernetes-helm"
]
},
+ {
+ "group": "Configuration",
+ "pages": [
+ "configuration/reference"
+ ]
+ },
"howitworks",
"emails",
"github",
diff --git a/apps/docs/snippets/docker-envvar-apps.mdx b/apps/docs/snippets/docker-envvar-apps.mdx
index 967daf402..314aeaa50 100644
--- a/apps/docs/snippets/docker-envvar-apps.mdx
+++ b/apps/docs/snippets/docker-envvar-apps.mdx
@@ -1,7 +1,10 @@
## Controlling container services
-The environment variable POSTIZ_APPS defaults to "", which means that all
-services will be started in a single container. However, you can only start
-specific services within the docker container by changing this environement variable.
+When the environment variable `POSTIZ_APPS` is not set, or is set to an empty string, all
+services will be started in a single container. This is normally fine for small, personal deployments.
-For most deployments, starting all services is fine. To scale out, you might want
-to start individual containers for "frontend", "backend", "worker" and "cron".
+However, you can only start specific services within the docker container by changing this environement variable.
+
+If you need to scale, you can experiement with having multiple containers defined like;
+- Frontend only: `POSTIZ_APPS="frontend"`
+- Backend only: `POSTIZ_APPS="backend"`
+- Worker and Cron only: `POSTIZ_APPS="worker cron"`
diff --git a/apps/docs/snippets/docker-envvar-general.mdx b/apps/docs/snippets/docker-envvar-general.mdx
new file mode 100644
index 000000000..cf1a09714
--- /dev/null
+++ b/apps/docs/snippets/docker-envvar-general.mdx
@@ -0,0 +1,15 @@
+# Set environment variables
+
+Postiz configuration is entirely via environment variables.
+
+When using Postiz container images, you can specify the environment variables when you create the container (`docker create -e DATABASE_URL=...`), but this might be
+a bit tedious, as Postiz requires quite a few variables set to startup.
+
+It is recommended to use a `postiz.env` file, which the Postiz containers look for in /config. Docker will automatically create this file for you on a
+docker volume the first time you start up Postiz. The default container images will copy the `/config/postiz.env` to `/apps/.env` on startup. Like with
+any environment variables, if you change them, you must restart the application for the changes to take effect.
+
+An example file of the most used configuration settings can be found here; [example postiz.env file](https://raw.githubusercontent.com/gitroomhq/postiz-app/main/.env.example)
+
+There is also a [configuration reference](/configuration/reference) page that goes into more detail.
+
From b9e5ab4a8c966eca68b04e31fc07373d8c495171 Mon Sep 17 00:00:00 2001
From: jamesread
Date: Sat, 14 Sep 2024 22:22:41 +0100
Subject: [PATCH 15/42] doc: Improve config docs
---
apps/docs/configuration/reference.mdx | 39 +++++++++++++++++++++++++++
1 file changed, 39 insertions(+)
create mode 100644 apps/docs/configuration/reference.mdx
diff --git a/apps/docs/configuration/reference.mdx b/apps/docs/configuration/reference.mdx
new file mode 100644
index 000000000..b53f62f28
--- /dev/null
+++ b/apps/docs/configuration/reference.mdx
@@ -0,0 +1,39 @@
+---
+title: Configuration Reference
+---
+
+At the moment, Postiz is entirely configured by environment variables. It is
+important to understand that any configuration change to environment variables
+will require an application restart.
+
+An example file of the most used configuration settings can be found here; [example postiz.env file](https://raw.githubusercontent.com/gitroomhq/postiz-app/main/.env.example)
+
+## Required Settings
+
+### `DATABASE_URL`
+
+eg: `postgresql://postiz-user:postiz-password@localhost:5432/postiz-db-local`
+
+Postgres is not strictly necessary, Postiz uses Prisma to connect to the database, so technically mariadb or other databases could be used.
+
+### `REDIS_URL`
+
+eg: `redis://localhost:6379`
+
+### `JWT_SECRET`
+
+A random string that should be unique for every installation, this is used to secure your JWT auth tokens.
+
+### `FRONTEND_URL`
+
+eg: `http://postiz.example.lan:4200`
+
+### `NEXT_PUBLIC_BACKEND_URL`
+
+eg: `http://postiz.example.lan:3000`
+
+### `BACKEND_INTERNAL_URL`
+
+If running everything in the same host/container: `http://localhost:3000`
+
+
From f8b4c5712432c6217bfba8848b20784a59238918 Mon Sep 17 00:00:00 2001
From: Nevo David
Date: Sun, 15 Sep 2024 14:37:00 +0700
Subject: [PATCH 16/42] feat: remove docs
---
apps/docs/README.md | 32 --
.../custom/analytics/get-analytics.mdx | 3 -
.../analytics/get-analyticstrending.mdx | 3 -
.../custom/analytics/post-analyticsstars.mdx | 3 -
.../custom/auth/post-authforgot-return.mdx | 3 -
.../custom/auth/post-authforgot.mdx | 3 -
.../custom/auth/post-authlogin.mdx | 3 -
.../custom/auth/post-authregister.mdx | 3 -
.../custom/billing/get-billing.mdx | 3 -
.../custom/billing/get-billingcheck.mdx | 3 -
.../custom/billing/get-billingportal.mdx | 3 -
.../custom/billing/post-billingcancel.mdx | 3 -
.../custom/billing/post-billingprorate.mdx | 3 -
.../custom/billing/post-billingsubscribe.mdx | 3 -
.../custom/comments/delete-comments.mdx | 3 -
.../custom/comments/get-comments.mdx | 3 -
.../custom/comments/post-comments-1.mdx | 3 -
.../custom/comments/post-comments.mdx | 3 -
.../custom/comments/put-comments.mdx | 3 -
.../integrations/delete-integrations.mdx | 3 -
.../custom/integrations/get-integrations.mdx | 3 -
.../integrations/get-integrationslist.mdx | 3 -
.../integrations/get-integrationssocial.mdx | 3 -
.../post-integrationsarticle-connect.mdx | 3 -
.../integrations/post-integrationsdisable.mdx | 3 -
.../integrations/post-integrationsenable.mdx | 3 -
.../post-integrationsfunction.mdx | 3 -
.../post-integrationssocial-connect.mdx | 3 -
.../api-reference/custom/media/get-media.mdx | 3 -
.../api-reference/custom/media/post-media.mdx | 3 -
.../notifications/get-notifications.mdx | 3 -
.../notifications/get-notificationslist.mdx | 3 -
.../custom/posts/delete-posts.mdx | 3 -
.../custom/posts/get-posts-1.mdx | 3 -
.../api-reference/custom/posts/get-posts.mdx | 3 -
.../custom/posts/get-postsold.mdx | 3 -
.../posts/get-postspredict-trending.mdx | 3 -
.../api-reference/custom/posts/post-posts.mdx | 3 -
.../custom/posts/put-posts-date.mdx | 3 -
.../settings/delete-settingsrepository.mdx | 3 -
.../custom/settings/delete-settingsteam.mdx | 3 -
.../custom/settings/get-settingsgithub.mdx | 3 -
.../custom/settings/get-settingsgithuburl.mdx | 3 -
.../settings/get-settingsorganizations-.mdx | 3 -
.../settings/get-settingsorganizations.mdx | 3 -
.../custom/settings/get-settingsteam.mdx | 3 -
.../custom/settings/post-settingsgithub.mdx | 3 -
.../settings/post-settingsorganizations.mdx | 3 -
.../custom/settings/post-settingsteam.mdx | 3 -
.../custom/stripe/post-stripe.mdx | 3 -
.../custom/user/get-userorganizations.mdx | 3 -
.../custom/user/get-userself.mdx | 3 -
.../custom/user/get-usersubscription.mdx | 3 -
.../custom/user/get-usersubscriptiontiers.mdx | 3 -
.../custom/user/post-userchange-org.mdx | 3 -
.../custom/user/post-userjoin-org.mdx | 3 -
apps/docs/api-reference/introduction.mdx | 18 -
apps/docs/configuration/reference.mdx | 39 ---
.../developer-guide/how-to-add-provider.mdx | 172 ----------
apps/docs/emails.mdx | 18 -
apps/docs/essentials/code.mdx | 37 --
apps/docs/essentials/images.mdx | 59 ----
apps/docs/essentials/markdown.mdx | 88 -----
apps/docs/essentials/navigation.mdx | 66 ----
apps/docs/essentials/settings.mdx | 318 ------------------
apps/docs/favicon.ico | Bin 15086 -> 0 bytes
apps/docs/favicon.png | Bin 1400 -> 0 bytes
apps/docs/github.mdx | 15 -
apps/docs/howitworks.mdx | 55 ---
apps/docs/images/arch.png | Bin 163764 -> 0 bytes
apps/docs/images/checks-passed.png | Bin 160724 -> 0 bytes
apps/docs/images/hero-dark.svg | 161 ---------
apps/docs/images/hero-light.svg | 155 ---------
.../providers/linkedin/linkedin-001.png | Bin 186416 -> 0 bytes
.../providers/linkedin/linkedin-002.png | Bin 292172 -> 0 bytes
.../images/providers/reddit/reddit-001.png | Bin 109978 -> 0 bytes
apps/docs/images/providers/x/x-001.png | Bin 44154 -> 0 bytes
apps/docs/images/providers/x/x-002.png | Bin 101655 -> 0 bytes
apps/docs/images/providers/x/x-003.png | Bin 74219 -> 0 bytes
apps/docs/images/providers/x/x-004.png | Bin 40701 -> 0 bytes
apps/docs/images/screens/analytics.png | Bin 318790 -> 0 bytes
apps/docs/images/screens/billing.png | Bin 269435 -> 0 bytes
apps/docs/images/screens/settings.png | Bin 239585 -> 0 bytes
apps/docs/installation/development.mdx | 164 ---------
apps/docs/installation/docker-compose.mdx | 79 -----
apps/docs/installation/docker.mdx | 39 ---
apps/docs/installation/kubernetes-helm.mdx | 13 -
apps/docs/introduction.mdx | 55 ---
apps/docs/logo/dark.png | Bin 10715 -> 0 bytes
apps/docs/logo/light.png | Bin 13913 -> 0 bytes
apps/docs/mint.json | 106 ------
apps/docs/openapi.json | 1 -
apps/docs/project.json | 21 --
apps/docs/providers/articles.mdx | 6 -
apps/docs/providers/linkedin/linkedin.mdx | 20 --
apps/docs/providers/reddit/reddit.mdx | 16 -
apps/docs/providers/x/x.mdx | 33 --
apps/docs/quickstart.mdx | 18 -
apps/docs/snippets/docker-envvar-apps.mdx | 10 -
apps/docs/snippets/docker-envvar-general.mdx | 15 -
apps/docs/snippets/earlydoc.mdx | 6 -
apps/docs/snippets/snippet-example.mdx | 3 -
apps/docs/support.mdx | 35 --
apps/docs/use/analytics.mdx | 10 -
apps/docs/use/billing.mdx | 9 -
apps/docs/use/calendar.mdx | 5 -
apps/docs/use/scheduling.mdx | 5 -
apps/docs/use/settings.mdx | 9 -
package.json | 2 -
109 files changed, 2078 deletions(-)
delete mode 100644 apps/docs/README.md
delete mode 100644 apps/docs/api-reference/custom/analytics/get-analytics.mdx
delete mode 100644 apps/docs/api-reference/custom/analytics/get-analyticstrending.mdx
delete mode 100644 apps/docs/api-reference/custom/analytics/post-analyticsstars.mdx
delete mode 100644 apps/docs/api-reference/custom/auth/post-authforgot-return.mdx
delete mode 100644 apps/docs/api-reference/custom/auth/post-authforgot.mdx
delete mode 100644 apps/docs/api-reference/custom/auth/post-authlogin.mdx
delete mode 100644 apps/docs/api-reference/custom/auth/post-authregister.mdx
delete mode 100644 apps/docs/api-reference/custom/billing/get-billing.mdx
delete mode 100644 apps/docs/api-reference/custom/billing/get-billingcheck.mdx
delete mode 100644 apps/docs/api-reference/custom/billing/get-billingportal.mdx
delete mode 100644 apps/docs/api-reference/custom/billing/post-billingcancel.mdx
delete mode 100644 apps/docs/api-reference/custom/billing/post-billingprorate.mdx
delete mode 100644 apps/docs/api-reference/custom/billing/post-billingsubscribe.mdx
delete mode 100644 apps/docs/api-reference/custom/comments/delete-comments.mdx
delete mode 100644 apps/docs/api-reference/custom/comments/get-comments.mdx
delete mode 100644 apps/docs/api-reference/custom/comments/post-comments-1.mdx
delete mode 100644 apps/docs/api-reference/custom/comments/post-comments.mdx
delete mode 100644 apps/docs/api-reference/custom/comments/put-comments.mdx
delete mode 100644 apps/docs/api-reference/custom/integrations/delete-integrations.mdx
delete mode 100644 apps/docs/api-reference/custom/integrations/get-integrations.mdx
delete mode 100644 apps/docs/api-reference/custom/integrations/get-integrationslist.mdx
delete mode 100644 apps/docs/api-reference/custom/integrations/get-integrationssocial.mdx
delete mode 100644 apps/docs/api-reference/custom/integrations/post-integrationsarticle-connect.mdx
delete mode 100644 apps/docs/api-reference/custom/integrations/post-integrationsdisable.mdx
delete mode 100644 apps/docs/api-reference/custom/integrations/post-integrationsenable.mdx
delete mode 100644 apps/docs/api-reference/custom/integrations/post-integrationsfunction.mdx
delete mode 100644 apps/docs/api-reference/custom/integrations/post-integrationssocial-connect.mdx
delete mode 100644 apps/docs/api-reference/custom/media/get-media.mdx
delete mode 100644 apps/docs/api-reference/custom/media/post-media.mdx
delete mode 100644 apps/docs/api-reference/custom/notifications/get-notifications.mdx
delete mode 100644 apps/docs/api-reference/custom/notifications/get-notificationslist.mdx
delete mode 100644 apps/docs/api-reference/custom/posts/delete-posts.mdx
delete mode 100644 apps/docs/api-reference/custom/posts/get-posts-1.mdx
delete mode 100644 apps/docs/api-reference/custom/posts/get-posts.mdx
delete mode 100644 apps/docs/api-reference/custom/posts/get-postsold.mdx
delete mode 100644 apps/docs/api-reference/custom/posts/get-postspredict-trending.mdx
delete mode 100644 apps/docs/api-reference/custom/posts/post-posts.mdx
delete mode 100644 apps/docs/api-reference/custom/posts/put-posts-date.mdx
delete mode 100644 apps/docs/api-reference/custom/settings/delete-settingsrepository.mdx
delete mode 100644 apps/docs/api-reference/custom/settings/delete-settingsteam.mdx
delete mode 100644 apps/docs/api-reference/custom/settings/get-settingsgithub.mdx
delete mode 100644 apps/docs/api-reference/custom/settings/get-settingsgithuburl.mdx
delete mode 100644 apps/docs/api-reference/custom/settings/get-settingsorganizations-.mdx
delete mode 100644 apps/docs/api-reference/custom/settings/get-settingsorganizations.mdx
delete mode 100644 apps/docs/api-reference/custom/settings/get-settingsteam.mdx
delete mode 100644 apps/docs/api-reference/custom/settings/post-settingsgithub.mdx
delete mode 100644 apps/docs/api-reference/custom/settings/post-settingsorganizations.mdx
delete mode 100644 apps/docs/api-reference/custom/settings/post-settingsteam.mdx
delete mode 100644 apps/docs/api-reference/custom/stripe/post-stripe.mdx
delete mode 100644 apps/docs/api-reference/custom/user/get-userorganizations.mdx
delete mode 100644 apps/docs/api-reference/custom/user/get-userself.mdx
delete mode 100644 apps/docs/api-reference/custom/user/get-usersubscription.mdx
delete mode 100644 apps/docs/api-reference/custom/user/get-usersubscriptiontiers.mdx
delete mode 100644 apps/docs/api-reference/custom/user/post-userchange-org.mdx
delete mode 100644 apps/docs/api-reference/custom/user/post-userjoin-org.mdx
delete mode 100644 apps/docs/api-reference/introduction.mdx
delete mode 100644 apps/docs/configuration/reference.mdx
delete mode 100644 apps/docs/developer-guide/how-to-add-provider.mdx
delete mode 100644 apps/docs/emails.mdx
delete mode 100644 apps/docs/essentials/code.mdx
delete mode 100644 apps/docs/essentials/images.mdx
delete mode 100644 apps/docs/essentials/markdown.mdx
delete mode 100644 apps/docs/essentials/navigation.mdx
delete mode 100644 apps/docs/essentials/settings.mdx
delete mode 100644 apps/docs/favicon.ico
delete mode 100755 apps/docs/favicon.png
delete mode 100644 apps/docs/github.mdx
delete mode 100644 apps/docs/howitworks.mdx
delete mode 100644 apps/docs/images/arch.png
delete mode 100644 apps/docs/images/checks-passed.png
delete mode 100644 apps/docs/images/hero-dark.svg
delete mode 100644 apps/docs/images/hero-light.svg
delete mode 100644 apps/docs/images/providers/linkedin/linkedin-001.png
delete mode 100644 apps/docs/images/providers/linkedin/linkedin-002.png
delete mode 100644 apps/docs/images/providers/reddit/reddit-001.png
delete mode 100644 apps/docs/images/providers/x/x-001.png
delete mode 100644 apps/docs/images/providers/x/x-002.png
delete mode 100644 apps/docs/images/providers/x/x-003.png
delete mode 100644 apps/docs/images/providers/x/x-004.png
delete mode 100644 apps/docs/images/screens/analytics.png
delete mode 100644 apps/docs/images/screens/billing.png
delete mode 100644 apps/docs/images/screens/settings.png
delete mode 100644 apps/docs/installation/development.mdx
delete mode 100644 apps/docs/installation/docker-compose.mdx
delete mode 100644 apps/docs/installation/docker.mdx
delete mode 100644 apps/docs/installation/kubernetes-helm.mdx
delete mode 100644 apps/docs/introduction.mdx
delete mode 100644 apps/docs/logo/dark.png
delete mode 100644 apps/docs/logo/light.png
delete mode 100644 apps/docs/mint.json
delete mode 100644 apps/docs/openapi.json
delete mode 100644 apps/docs/project.json
delete mode 100644 apps/docs/providers/articles.mdx
delete mode 100644 apps/docs/providers/linkedin/linkedin.mdx
delete mode 100644 apps/docs/providers/reddit/reddit.mdx
delete mode 100644 apps/docs/providers/x/x.mdx
delete mode 100644 apps/docs/quickstart.mdx
delete mode 100644 apps/docs/snippets/docker-envvar-apps.mdx
delete mode 100644 apps/docs/snippets/docker-envvar-general.mdx
delete mode 100644 apps/docs/snippets/earlydoc.mdx
delete mode 100644 apps/docs/snippets/snippet-example.mdx
delete mode 100644 apps/docs/support.mdx
delete mode 100644 apps/docs/use/analytics.mdx
delete mode 100644 apps/docs/use/billing.mdx
delete mode 100644 apps/docs/use/calendar.mdx
delete mode 100644 apps/docs/use/scheduling.mdx
delete mode 100644 apps/docs/use/settings.mdx
diff --git a/apps/docs/README.md b/apps/docs/README.md
deleted file mode 100644
index c89c478d1..000000000
--- a/apps/docs/README.md
+++ /dev/null
@@ -1,32 +0,0 @@
-# Mintlify Starter Kit
-
-Click on `Use this template` to copy the Mintlify starter kit. The starter kit contains examples including
-
-- Guide pages
-- Navigation
-- Customizations
-- API Reference pages
-- Use of popular components
-
-### Development
-
-Install the [Mintlify CLI](https://www.npmjs.com/package/mintlify) to preview the documentation changes locally. To install, use the following command
-
-```
-npm i -g mintlify
-```
-
-Run the following command at the root of your documentation (where mint.json is)
-
-```
-mintlify dev
-```
-
-### Publishing Changes
-
-Install our Github App to autopropagate changes from youre repo to your deployment. Changes will be deployed to production automatically after pushing to the default branch. Find the link to install on your dashboard.
-
-#### Troubleshooting
-
-- Mintlify dev isn't running - Run `mintlify install` it'll re-install dependencies.
-- Page loads as a 404 - Make sure you are running in a folder with `mint.json`
diff --git a/apps/docs/api-reference/custom/analytics/get-analytics.mdx b/apps/docs/api-reference/custom/analytics/get-analytics.mdx
deleted file mode 100644
index d66ca0a84..000000000
--- a/apps/docs/api-reference/custom/analytics/get-analytics.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: get /analytics
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/custom/analytics/get-analyticstrending.mdx b/apps/docs/api-reference/custom/analytics/get-analyticstrending.mdx
deleted file mode 100644
index 1401ebfe7..000000000
--- a/apps/docs/api-reference/custom/analytics/get-analyticstrending.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: get /analytics/trending
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/custom/analytics/post-analyticsstars.mdx b/apps/docs/api-reference/custom/analytics/post-analyticsstars.mdx
deleted file mode 100644
index a785314cc..000000000
--- a/apps/docs/api-reference/custom/analytics/post-analyticsstars.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: post /analytics/stars
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/custom/auth/post-authforgot-return.mdx b/apps/docs/api-reference/custom/auth/post-authforgot-return.mdx
deleted file mode 100644
index 98b152f6a..000000000
--- a/apps/docs/api-reference/custom/auth/post-authforgot-return.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: post /auth/forgot-return
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/custom/auth/post-authforgot.mdx b/apps/docs/api-reference/custom/auth/post-authforgot.mdx
deleted file mode 100644
index ecfdaec7f..000000000
--- a/apps/docs/api-reference/custom/auth/post-authforgot.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: post /auth/forgot
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/custom/auth/post-authlogin.mdx b/apps/docs/api-reference/custom/auth/post-authlogin.mdx
deleted file mode 100644
index c20b13e4e..000000000
--- a/apps/docs/api-reference/custom/auth/post-authlogin.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: post /auth/login
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/custom/auth/post-authregister.mdx b/apps/docs/api-reference/custom/auth/post-authregister.mdx
deleted file mode 100644
index 6e6245559..000000000
--- a/apps/docs/api-reference/custom/auth/post-authregister.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: post /auth/register
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/custom/billing/get-billing.mdx b/apps/docs/api-reference/custom/billing/get-billing.mdx
deleted file mode 100644
index 3fc1da215..000000000
--- a/apps/docs/api-reference/custom/billing/get-billing.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: get /billing
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/custom/billing/get-billingcheck.mdx b/apps/docs/api-reference/custom/billing/get-billingcheck.mdx
deleted file mode 100644
index 4bd8e5339..000000000
--- a/apps/docs/api-reference/custom/billing/get-billingcheck.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: get /billing/check/{id}
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/custom/billing/get-billingportal.mdx b/apps/docs/api-reference/custom/billing/get-billingportal.mdx
deleted file mode 100644
index 7d6a0bea2..000000000
--- a/apps/docs/api-reference/custom/billing/get-billingportal.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: get /billing/portal
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/custom/billing/post-billingcancel.mdx b/apps/docs/api-reference/custom/billing/post-billingcancel.mdx
deleted file mode 100644
index aaf94dbdb..000000000
--- a/apps/docs/api-reference/custom/billing/post-billingcancel.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: post /billing/cancel
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/custom/billing/post-billingprorate.mdx b/apps/docs/api-reference/custom/billing/post-billingprorate.mdx
deleted file mode 100644
index faf145e62..000000000
--- a/apps/docs/api-reference/custom/billing/post-billingprorate.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: post /billing/prorate
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/custom/billing/post-billingsubscribe.mdx b/apps/docs/api-reference/custom/billing/post-billingsubscribe.mdx
deleted file mode 100644
index b922bdbd1..000000000
--- a/apps/docs/api-reference/custom/billing/post-billingsubscribe.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: post /billing/subscribe
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/custom/comments/delete-comments.mdx b/apps/docs/api-reference/custom/comments/delete-comments.mdx
deleted file mode 100644
index 05f2e159f..000000000
--- a/apps/docs/api-reference/custom/comments/delete-comments.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: delete /comments/{id}
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/custom/comments/get-comments.mdx b/apps/docs/api-reference/custom/comments/get-comments.mdx
deleted file mode 100644
index a89d40d7b..000000000
--- a/apps/docs/api-reference/custom/comments/get-comments.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: get /comments/{date}
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/custom/comments/post-comments-1.mdx b/apps/docs/api-reference/custom/comments/post-comments-1.mdx
deleted file mode 100644
index b808bdeb2..000000000
--- a/apps/docs/api-reference/custom/comments/post-comments-1.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: post /comments/{id}
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/custom/comments/post-comments.mdx b/apps/docs/api-reference/custom/comments/post-comments.mdx
deleted file mode 100644
index 20750b6c8..000000000
--- a/apps/docs/api-reference/custom/comments/post-comments.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: post /comments
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/custom/comments/put-comments.mdx b/apps/docs/api-reference/custom/comments/put-comments.mdx
deleted file mode 100644
index 80e76a6f2..000000000
--- a/apps/docs/api-reference/custom/comments/put-comments.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: put /comments/{id}
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/custom/integrations/delete-integrations.mdx b/apps/docs/api-reference/custom/integrations/delete-integrations.mdx
deleted file mode 100644
index 01eb5339f..000000000
--- a/apps/docs/api-reference/custom/integrations/delete-integrations.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: delete /integrations
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/custom/integrations/get-integrations.mdx b/apps/docs/api-reference/custom/integrations/get-integrations.mdx
deleted file mode 100644
index ea16dc896..000000000
--- a/apps/docs/api-reference/custom/integrations/get-integrations.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: get /integrations
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/custom/integrations/get-integrationslist.mdx b/apps/docs/api-reference/custom/integrations/get-integrationslist.mdx
deleted file mode 100644
index 4492a8eb1..000000000
--- a/apps/docs/api-reference/custom/integrations/get-integrationslist.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: get /integrations/list
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/custom/integrations/get-integrationssocial.mdx b/apps/docs/api-reference/custom/integrations/get-integrationssocial.mdx
deleted file mode 100644
index 012ff9357..000000000
--- a/apps/docs/api-reference/custom/integrations/get-integrationssocial.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: get /integrations/social/{integration}
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/custom/integrations/post-integrationsarticle-connect.mdx b/apps/docs/api-reference/custom/integrations/post-integrationsarticle-connect.mdx
deleted file mode 100644
index 992192eee..000000000
--- a/apps/docs/api-reference/custom/integrations/post-integrationsarticle-connect.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: post /integrations/article/{integration}/connect
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/custom/integrations/post-integrationsdisable.mdx b/apps/docs/api-reference/custom/integrations/post-integrationsdisable.mdx
deleted file mode 100644
index 2af123c5f..000000000
--- a/apps/docs/api-reference/custom/integrations/post-integrationsdisable.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: post /integrations/disable
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/custom/integrations/post-integrationsenable.mdx b/apps/docs/api-reference/custom/integrations/post-integrationsenable.mdx
deleted file mode 100644
index 1866d943b..000000000
--- a/apps/docs/api-reference/custom/integrations/post-integrationsenable.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: post /integrations/enable
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/custom/integrations/post-integrationsfunction.mdx b/apps/docs/api-reference/custom/integrations/post-integrationsfunction.mdx
deleted file mode 100644
index 7bd2564bd..000000000
--- a/apps/docs/api-reference/custom/integrations/post-integrationsfunction.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: post /integrations/function
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/custom/integrations/post-integrationssocial-connect.mdx b/apps/docs/api-reference/custom/integrations/post-integrationssocial-connect.mdx
deleted file mode 100644
index 7b7e99b47..000000000
--- a/apps/docs/api-reference/custom/integrations/post-integrationssocial-connect.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: post /integrations/social/{integration}/connect
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/custom/media/get-media.mdx b/apps/docs/api-reference/custom/media/get-media.mdx
deleted file mode 100644
index 84018f438..000000000
--- a/apps/docs/api-reference/custom/media/get-media.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: get /media
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/custom/media/post-media.mdx b/apps/docs/api-reference/custom/media/post-media.mdx
deleted file mode 100644
index 5ef2236a5..000000000
--- a/apps/docs/api-reference/custom/media/post-media.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: post /media
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/custom/notifications/get-notifications.mdx b/apps/docs/api-reference/custom/notifications/get-notifications.mdx
deleted file mode 100644
index 0a659ffc6..000000000
--- a/apps/docs/api-reference/custom/notifications/get-notifications.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: get /notifications
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/custom/notifications/get-notificationslist.mdx b/apps/docs/api-reference/custom/notifications/get-notificationslist.mdx
deleted file mode 100644
index 44bb0ab78..000000000
--- a/apps/docs/api-reference/custom/notifications/get-notificationslist.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: get /notifications/list
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/custom/posts/delete-posts.mdx b/apps/docs/api-reference/custom/posts/delete-posts.mdx
deleted file mode 100644
index 69d46e4ff..000000000
--- a/apps/docs/api-reference/custom/posts/delete-posts.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: delete /posts/{group}
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/custom/posts/get-posts-1.mdx b/apps/docs/api-reference/custom/posts/get-posts-1.mdx
deleted file mode 100644
index b4b6045da..000000000
--- a/apps/docs/api-reference/custom/posts/get-posts-1.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: get /posts/{id}
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/custom/posts/get-posts.mdx b/apps/docs/api-reference/custom/posts/get-posts.mdx
deleted file mode 100644
index 2b8135958..000000000
--- a/apps/docs/api-reference/custom/posts/get-posts.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: get /posts
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/custom/posts/get-postsold.mdx b/apps/docs/api-reference/custom/posts/get-postsold.mdx
deleted file mode 100644
index 5f2cca667..000000000
--- a/apps/docs/api-reference/custom/posts/get-postsold.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: get /posts/old
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/custom/posts/get-postspredict-trending.mdx b/apps/docs/api-reference/custom/posts/get-postspredict-trending.mdx
deleted file mode 100644
index 0f0ad9837..000000000
--- a/apps/docs/api-reference/custom/posts/get-postspredict-trending.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: get /posts/predict-trending
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/custom/posts/post-posts.mdx b/apps/docs/api-reference/custom/posts/post-posts.mdx
deleted file mode 100644
index 1a6a78bf7..000000000
--- a/apps/docs/api-reference/custom/posts/post-posts.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: post /posts
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/custom/posts/put-posts-date.mdx b/apps/docs/api-reference/custom/posts/put-posts-date.mdx
deleted file mode 100644
index b9655c264..000000000
--- a/apps/docs/api-reference/custom/posts/put-posts-date.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: put /posts/{id}/date
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/custom/settings/delete-settingsrepository.mdx b/apps/docs/api-reference/custom/settings/delete-settingsrepository.mdx
deleted file mode 100644
index 3b646c0fe..000000000
--- a/apps/docs/api-reference/custom/settings/delete-settingsrepository.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: delete /settings/repository/{id}
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/custom/settings/delete-settingsteam.mdx b/apps/docs/api-reference/custom/settings/delete-settingsteam.mdx
deleted file mode 100644
index aaf40de29..000000000
--- a/apps/docs/api-reference/custom/settings/delete-settingsteam.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: delete /settings/team/{id}
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/custom/settings/get-settingsgithub.mdx b/apps/docs/api-reference/custom/settings/get-settingsgithub.mdx
deleted file mode 100644
index ac3cbd5c4..000000000
--- a/apps/docs/api-reference/custom/settings/get-settingsgithub.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: get /settings/github
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/custom/settings/get-settingsgithuburl.mdx b/apps/docs/api-reference/custom/settings/get-settingsgithuburl.mdx
deleted file mode 100644
index b952fe505..000000000
--- a/apps/docs/api-reference/custom/settings/get-settingsgithuburl.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: get /settings/github/url
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/custom/settings/get-settingsorganizations-.mdx b/apps/docs/api-reference/custom/settings/get-settingsorganizations-.mdx
deleted file mode 100644
index 57bb5902e..000000000
--- a/apps/docs/api-reference/custom/settings/get-settingsorganizations-.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: get /settings/organizations/{id}/{github}
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/custom/settings/get-settingsorganizations.mdx b/apps/docs/api-reference/custom/settings/get-settingsorganizations.mdx
deleted file mode 100644
index 8b64a9b1f..000000000
--- a/apps/docs/api-reference/custom/settings/get-settingsorganizations.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: get /settings/organizations/{id}
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/custom/settings/get-settingsteam.mdx b/apps/docs/api-reference/custom/settings/get-settingsteam.mdx
deleted file mode 100644
index 5a05bd017..000000000
--- a/apps/docs/api-reference/custom/settings/get-settingsteam.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: get /settings/team
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/custom/settings/post-settingsgithub.mdx b/apps/docs/api-reference/custom/settings/post-settingsgithub.mdx
deleted file mode 100644
index bf19af99a..000000000
--- a/apps/docs/api-reference/custom/settings/post-settingsgithub.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: post /settings/github
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/custom/settings/post-settingsorganizations.mdx b/apps/docs/api-reference/custom/settings/post-settingsorganizations.mdx
deleted file mode 100644
index fd26194f8..000000000
--- a/apps/docs/api-reference/custom/settings/post-settingsorganizations.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: post /settings/organizations/{id}
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/custom/settings/post-settingsteam.mdx b/apps/docs/api-reference/custom/settings/post-settingsteam.mdx
deleted file mode 100644
index bde58c248..000000000
--- a/apps/docs/api-reference/custom/settings/post-settingsteam.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: post /settings/team
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/custom/stripe/post-stripe.mdx b/apps/docs/api-reference/custom/stripe/post-stripe.mdx
deleted file mode 100644
index 3a80d176d..000000000
--- a/apps/docs/api-reference/custom/stripe/post-stripe.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: post /stripe
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/custom/user/get-userorganizations.mdx b/apps/docs/api-reference/custom/user/get-userorganizations.mdx
deleted file mode 100644
index 66f23d584..000000000
--- a/apps/docs/api-reference/custom/user/get-userorganizations.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: get /user/organizations
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/custom/user/get-userself.mdx b/apps/docs/api-reference/custom/user/get-userself.mdx
deleted file mode 100644
index 0d91b7c42..000000000
--- a/apps/docs/api-reference/custom/user/get-userself.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: get /user/self
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/custom/user/get-usersubscription.mdx b/apps/docs/api-reference/custom/user/get-usersubscription.mdx
deleted file mode 100644
index 3254da9e6..000000000
--- a/apps/docs/api-reference/custom/user/get-usersubscription.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: get /user/subscription
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/custom/user/get-usersubscriptiontiers.mdx b/apps/docs/api-reference/custom/user/get-usersubscriptiontiers.mdx
deleted file mode 100644
index b277613e7..000000000
--- a/apps/docs/api-reference/custom/user/get-usersubscriptiontiers.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: get /user/subscription/tiers
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/custom/user/post-userchange-org.mdx b/apps/docs/api-reference/custom/user/post-userchange-org.mdx
deleted file mode 100644
index 73d9742eb..000000000
--- a/apps/docs/api-reference/custom/user/post-userchange-org.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: post /user/change-org
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/custom/user/post-userjoin-org.mdx b/apps/docs/api-reference/custom/user/post-userjoin-org.mdx
deleted file mode 100644
index 27014d520..000000000
--- a/apps/docs/api-reference/custom/user/post-userjoin-org.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: post /user/join-org
----
\ No newline at end of file
diff --git a/apps/docs/api-reference/introduction.mdx b/apps/docs/api-reference/introduction.mdx
deleted file mode 100644
index f1f59cb8a..000000000
--- a/apps/docs/api-reference/introduction.mdx
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: 'Introduction'
----
-
-
- If you're not looking to build API reference documentation, you can delete
- this section by removing the api-reference folder.
-
-
-## Welcome
-
-## How to use the API
-There are two main options to use the API:
-1. You can send an header called `auth` with the token you received when you logged in.
-2. You can send a cookie called `auth` with the token you received when you logged in.
-
-The dashboard mainly uses the cookie method to authenticate requests.
-But if you want to test the API with Swagger or Postman, you can use the `auth` header.
diff --git a/apps/docs/configuration/reference.mdx b/apps/docs/configuration/reference.mdx
deleted file mode 100644
index b53f62f28..000000000
--- a/apps/docs/configuration/reference.mdx
+++ /dev/null
@@ -1,39 +0,0 @@
----
-title: Configuration Reference
----
-
-At the moment, Postiz is entirely configured by environment variables. It is
-important to understand that any configuration change to environment variables
-will require an application restart.
-
-An example file of the most used configuration settings can be found here; [example postiz.env file](https://raw.githubusercontent.com/gitroomhq/postiz-app/main/.env.example)
-
-## Required Settings
-
-### `DATABASE_URL`
-
-eg: `postgresql://postiz-user:postiz-password@localhost:5432/postiz-db-local`
-
-Postgres is not strictly necessary, Postiz uses Prisma to connect to the database, so technically mariadb or other databases could be used.
-
-### `REDIS_URL`
-
-eg: `redis://localhost:6379`
-
-### `JWT_SECRET`
-
-A random string that should be unique for every installation, this is used to secure your JWT auth tokens.
-
-### `FRONTEND_URL`
-
-eg: `http://postiz.example.lan:4200`
-
-### `NEXT_PUBLIC_BACKEND_URL`
-
-eg: `http://postiz.example.lan:3000`
-
-### `BACKEND_INTERNAL_URL`
-
-If running everything in the same host/container: `http://localhost:3000`
-
-
diff --git a/apps/docs/developer-guide/how-to-add-provider.mdx b/apps/docs/developer-guide/how-to-add-provider.mdx
deleted file mode 100644
index a813633e2..000000000
--- a/apps/docs/developer-guide/how-to-add-provider.mdx
+++ /dev/null
@@ -1,172 +0,0 @@
----
-title: How to add a new provider
-description: How to add a new provider to Gitroom
----
-
-The system is designed to be easily extensible.
-Each provider need to implement multiple things.
-There are two main options:
-- Implement a social media provider (oAuth2)
-- Implement a publishing provider (Token)
-
-
-
- ### The backend logic:
-
-
Define DTO for the settings of the provider
-
Generate an authentication URL
-
Authenticate the user from the callback
-
Refresh the user token
-
-
-
- ### The frontend logic:
-
-
Implement the settings page
-
Implement the preview page
-
Upload the provider image
-
-
-
-
-## Social Media
-
-### Backend
-For our example, we will use the X provider.
-1. First, we need to create a DTO for the settings of the provider.
-head over to `nestjs-libraries/src/dtos/posts/providers-settings`
-And create a new file `x-provider-settings.dto.ts`
-(you don't have to create a DTO if there are no settings)
-Once created head over to `nestjs-libraries/src/dtos/posts/providers-settings/all.providers.settings.ts`
-And add the new DTO.
-Head to `libraries/nestjs-libraries/src/dtos/posts/create.post.dto.ts`
-look for the discriminator and add another line in the format of
-
-```typescript create.post.dto.ts
-{ value: DTOClassName, name: 'providerName' },
-```
-
-2. head over to `libraries/nestjs-libraries/src/integrations/social`
-And create a new provider file `providerName.provider.ts`
-The content of the file should look like this:
-
-
-```typescript For oAuth2 providers
-import {
- AuthTokenDetails,
- PostDetails,
- PostResponse,
- SocialProvider,
-} from '@gitroom/nestjs-libraries/integrations/social/social.integrations.interface';
-
-export class XProvider implements SocialProvider {
- identifier = 'providerName';
- name = 'Provider Name';
- async refreshToken(refreshToken: string): Promise {
- ...refresh the token
- }
-
- async generateAuthUrl() {
- ...generate the auth url
- }
-
- async authenticate(params: { code: string; codeVerifier: string }) {
- ...authenticate the user
- }
-
- async post(
- id: string,
- accessToken: string,
- postDetails: PostDetails[]
- ): Promise {
- ...post the content
- }
-}
-```
-
-```typescript For Token providers
-import { ArticleProvider } from '@gitroom/nestjs-libraries/integrations/article/article.integrations.interface';
-
-export class DevToProvider implements ArticleProvider {
- identifier = 'providerName';
- name = 'ProviderName';
- async authenticate(token: string) {
-
- }
-
- async post(token: string, content: string, settings: DTOClassName) {
-
- }
-}
-```
-
-
-Take a look at the exising providers to see how to implement the methods.
-
-### Custom functions
-You might want to create custom functions for the providers for example: get available orgs, get available pages, etc.
-You can create a public function in the provider for example `organizations` and later call it from a special hook from the frontend.
-
-### Integration Manager
-Open `libraries/nestjs-libraries/src/integrations/integration.manager.ts`
-And add the new provider to either `socialIntegrationList` (oAuth2) or `articleIntegrationList` (Token)
-
----
-
-### Frontend
-
-1. Head over to `apps/frontend/src/components/launches/providers`
-Create a new folder with the providerName
-Add a new file `providerName.provider.tsx`
-The content of the file should look like this:
-
-```typescript providerName.provider.tsx
-import { FC } from 'react';
-import { withProvider } from '@gitroom/frontend/components/launches/providers/high.order.provider';
-import { useSettings } from '@gitroom/frontend/components/launches/helpers/use.values';
-import { useIntegration } from '@gitroom/frontend/components/launches/helpers/use.integration';
-
-const ProviderPreview: FC = () => {
- const { value } = useIntegration();
- const settings = useSettings();
-
- return (
- ...Preview
- );
-};
-
-const ProviderSettings: FC = () => {
- const form = useSettings();
- const { date } = useIntegration();
- return (
- ...Settings
- );
-};
-
-export default withProvider(DevtoSettings, DevtoPreview, DTOClassName);
-```
-
-If you want to use a custom function for the provider you can use the `useCustomProviderFunction` hook.
-
-```typescript
-import { useCustomProviderFunction } from '@gitroom/frontend/components/launches/helpers/use.custom.provider.function';
-import { useCallback } from 'react';
-const customFunc = useCustomProviderFunction();
-
-// and use it like that:
-const getOrgs = useCallback(() => {
- customFunc.get('organizations', {
- anyKey: 'anyValue'
- })
-}, []);
-```
-
-It will automatically interact with the right provider saved for the user.
-
-You can look at the other integration to understand what data to put inside.
-
-2. Open `apps/frontend/src/components/launches/providers/show.all.providers.tsx`
-And add the new provider to the list.
-```typescript show.all.providers.tsx
- {identifier: 'providerName', component: DefaultImportFromHighOrderProvider},
-```
diff --git a/apps/docs/emails.mdx b/apps/docs/emails.mdx
deleted file mode 100644
index e7c7ea455..000000000
--- a/apps/docs/emails.mdx
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: Email Notifications
-description: How to send notifications to users
----
-
-Postiz uses Resend to send email notifications to users. Emails are currently
-required as part of the new-user creation process, which sends an activation
-email.
-
-* Register to [Resend](https://resend.com), and connect your domain.
-* Copy your API Key from the Resend control panel.
-* Open the .env file and edit the following line.
-
-```env
-RESEND_API_KEY=""
-```
-
-Feel free to contribute other providers to send email notifications.
diff --git a/apps/docs/essentials/code.mdx b/apps/docs/essentials/code.mdx
deleted file mode 100644
index d2a462a7a..000000000
--- a/apps/docs/essentials/code.mdx
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: 'Code Blocks'
-description: 'Display inline code and code blocks'
-icon: 'code'
----
-
-## Basic
-
-### Inline Code
-
-To denote a `word` or `phrase` as code, enclose it in backticks (`).
-
-```
-To denote a `word` or `phrase` as code, enclose it in backticks (`).
-```
-
-### Code Block
-
-Use [fenced code blocks](https://www.markdownguide.org/extended-syntax/#fenced-code-blocks) by enclosing code in three backticks and follow the leading ticks with the programming language of your snippet to get syntax highlighting. Optionally, you can also write the name of your code after the programming language.
-
-```java HelloWorld.java
-class HelloWorld {
- public static void main(String[] args) {
- System.out.println("Hello, World!");
- }
-}
-```
-
-````md
-```java HelloWorld.java
-class HelloWorld {
- public static void main(String[] args) {
- System.out.println("Hello, World!");
- }
-}
-```
-````
diff --git a/apps/docs/essentials/images.mdx b/apps/docs/essentials/images.mdx
deleted file mode 100644
index 4c1517777..000000000
--- a/apps/docs/essentials/images.mdx
+++ /dev/null
@@ -1,59 +0,0 @@
----
-title: 'Images and Embeds'
-description: 'Add image, video, and other HTML elements'
-icon: 'image'
----
-
-
-
-## Image
-
-### Using Markdown
-
-The [markdown syntax](https://www.markdownguide.org/basic-syntax/#images) lets you add images using the following code
-
-```md
-![title](/path/image.jpg)
-```
-
-Note that the image file size must be less than 5MB. Otherwise, we recommend hosting on a service like [Cloudinary](https://cloudinary.com/) or [S3](https://aws.amazon.com/s3/). You can then use that URL and embed.
-
-### Using Embeds
-
-To get more customizability with images, you can also use [embeds](/writing-content/embed) to add images
-
-```html
-
-```
-
-## Embeds and HTML elements
-
-
-
-
-
-
-
-Mintlify supports [HTML tags in Markdown](https://www.markdownguide.org/basic-syntax/#html). This is helpful if you prefer HTML tags to Markdown syntax, and lets you create documentation with infinite flexibility.
-
-
-
-### iFrames
-
-Loads another HTML page within the document. Most commonly used for embedding videos.
-
-```html
-
-```
diff --git a/apps/docs/essentials/markdown.mdx b/apps/docs/essentials/markdown.mdx
deleted file mode 100644
index c8ad9c1f3..000000000
--- a/apps/docs/essentials/markdown.mdx
+++ /dev/null
@@ -1,88 +0,0 @@
----
-title: 'Markdown Syntax'
-description: 'Text, title, and styling in standard markdown'
-icon: 'text-size'
----
-
-## Titles
-
-Best used for section headers.
-
-```md
-## Titles
-```
-
-### Subtitles
-
-Best use to subsection headers.
-
-```md
-### Subtitles
-```
-
-
-
-Each **title** and **subtitle** creates an anchor and also shows up on the table of contents on the right.
-
-
-
-## Text Formatting
-
-We support most markdown formatting. Simply add `**`, `_`, or `~` around text to format it.
-
-| Style | How to write it | Result |
-| ------------- | ----------------- | --------------- |
-| Bold | `**bold**` | **bold** |
-| Italic | `_italic_` | _italic_ |
-| Strikethrough | `~strikethrough~` | ~strikethrough~ |
-
-You can combine these. For example, write `**_bold and italic_**` to get **_bold and italic_** text.
-
-You need to use HTML to write superscript and subscript text. That is, add `` or `` around your text.
-
-| Text Size | How to write it | Result |
-| ----------- | ------------------------ | ---------------------- |
-| Superscript | `superscript` | superscript |
-| Subscript | `subscript` | subscript |
-
-## Linking to Pages
-
-You can add a link by wrapping text in `[]()`. You would write `[link to google](https://google.com)` to [link to google](https://google.com).
-
-Links to pages in your docs need to be root-relative. Basically, you should include the entire folder path. For example, `[link to text](/writing-content/text)` links to the page "Text" in our components section.
-
-Relative links like `[link to text](../text)` will open slower because we cannot optimize them as easily.
-
-## Blockquotes
-
-### Singleline
-
-To create a blockquote, add a `>` in front of a paragraph.
-
-> Dorothy followed her through many of the beautiful rooms in her castle.
-
-```md
-> Dorothy followed her through many of the beautiful rooms in her castle.
-```
-
-### Multiline
-
-> Dorothy followed her through many of the beautiful rooms in her castle.
->
-> The Witch bade her clean the pots and kettles and sweep the floor and keep the fire fed with wood.
-
-```md
-> Dorothy followed her through many of the beautiful rooms in her castle.
->
-> The Witch bade her clean the pots and kettles and sweep the floor and keep the fire fed with wood.
-```
-
-### LaTeX
-
-Mintlify supports [LaTeX](https://www.latex-project.org) through the Latex component.
-
-8 x (vk x H1 - H2) = (0,1)
-
-```md
-8 x (vk x H1 - H2) = (0,1)
-```
diff --git a/apps/docs/essentials/navigation.mdx b/apps/docs/essentials/navigation.mdx
deleted file mode 100644
index ca44bb645..000000000
--- a/apps/docs/essentials/navigation.mdx
+++ /dev/null
@@ -1,66 +0,0 @@
----
-title: 'Navigation'
-description: 'The navigation field in mint.json defines the pages that go in the navigation menu'
-icon: 'map'
----
-
-The navigation menu is the list of links on every website.
-
-You will likely update `mint.json` every time you add a new page. Pages do not show up automatically.
-
-## Navigation syntax
-
-Our navigation syntax is recursive which means you can make nested navigation groups. You don't need to include `.mdx` in page names.
-
-
-
-```json Regular Navigation
-"navigation": [
- {
- "group": "Getting Started",
- "pages": ["quickstart"]
- }
-]
-```
-
-```json Nested Navigation
-"navigation": [
- {
- "group": "Getting Started",
- "pages": [
- "quickstart",
- {
- "group": "Nested Reference Pages",
- "pages": ["nested-reference-page"]
- }
- ]
- }
-]
-```
-
-
-
-## Folders
-
-Simply put your MDX files in folders and update the paths in `mint.json`.
-
-For example, to have a page at `https://yoursite.com/your-folder/your-page` you would make a folder called `your-folder` containing an MDX file called `your-page.mdx`.
-
-
-
-You cannot use `api` for the name of a folder unless you nest it inside another folder. Mintlify uses Next.js which reserves the top-level `api` folder for internal server calls. A folder name such as `api-reference` would be accepted.
-
-
-
-```json Navigation With Folder
-"navigation": [
- {
- "group": "Group Name",
- "pages": ["your-folder/your-page"]
- }
-]
-```
-
-## Hidden Pages
-
-MDX files not included in `mint.json` will not show up in the sidebar but are accessible through the search bar and by linking directly to them.
diff --git a/apps/docs/essentials/settings.mdx b/apps/docs/essentials/settings.mdx
deleted file mode 100644
index ae6e7d6ab..000000000
--- a/apps/docs/essentials/settings.mdx
+++ /dev/null
@@ -1,318 +0,0 @@
----
-title: 'Global Settings'
-description: 'Mintlify gives you complete control over the look and feel of your documentation using the mint.json file'
-icon: 'gear'
----
-
-Every Mintlify site needs a `mint.json` file with the core configuration settings. Learn more about the [properties](#properties) below.
-
-## Properties
-
-
-Name of your project. Used for the global title.
-
-Example: `mintlify`
-
-
-
-
- An array of groups with all the pages within that group
-
-
- The name of the group.
-
- Example: `Settings`
-
-
-
- The relative paths to the markdown files that will serve as pages.
-
- Example: `["customization", "page"]`
-
-
-
-
-
-
-
- Path to logo image or object with path to "light" and "dark" mode logo images
-
-
- Path to the logo in light mode
-
-
- Path to the logo in dark mode
-
-
- Where clicking on the logo links you to
-
-
-
-
-
- Path to the favicon image
-
-
-
- Hex color codes for your global theme
-
-
- The primary color. Used for most often for highlighted content, section
- headers, accents, in light mode
-
-
- The primary color for dark mode. Used for most often for highlighted
- content, section headers, accents, in dark mode
-
-
- The primary color for important buttons
-
-
- The color of the background in both light and dark mode
-
-
- The hex color code of the background in light mode
-
-
- The hex color code of the background in dark mode
-
-
-
-
-
-
-
- Array of `name`s and `url`s of links you want to include in the topbar
-
-
- The name of the button.
-
- Example: `Contact us`
-
-
- The url once you click on the button. Example: `https://mintlify.com/contact`
-
-
-
-
-
-
-
-
- Link shows a button. GitHub shows the repo information at the url provided including the number of GitHub stars.
-
-
- If `link`: What the button links to.
-
- If `github`: Link to the repository to load GitHub information from.
-
-
- Text inside the button. Only required if `type` is a `link`.
-
-
-
-
-
-
- Array of version names. Only use this if you want to show different versions
- of docs with a dropdown in the navigation bar.
-
-
-
- An array of the anchors, includes the `icon`, `color`, and `url`.
-
-
- The [Font Awesome](https://fontawesome.com/search?s=brands%2Cduotone) icon used to feature the anchor.
-
- Example: `comments`
-
-
- The name of the anchor label.
-
- Example: `Community`
-
-
- The start of the URL that marks what pages go in the anchor. Generally, this is the name of the folder you put your pages in.
-
-
- The hex color of the anchor icon background. Can also be a gradient if you pass an object with the properties `from` and `to` that are each a hex color.
-
-
- Used if you want to hide an anchor until the correct docs version is selected.
-
-
- Pass `true` if you want to hide the anchor until you directly link someone to docs inside it.
-
-
- One of: "brands", "duotone", "light", "sharp-solid", "solid", or "thin"
-
-
-
-
-
-
- Override the default configurations for the top-most anchor.
-
-
- The name of the top-most anchor
-
-
- Font Awesome icon.
-
-
- One of: "brands", "duotone", "light", "sharp-solid", "solid", or "thin"
-
-
-
-
-
- An array of navigational tabs.
-
-
- The name of the tab label.
-
-
- The start of the URL that marks what pages go in the tab. Generally, this
- is the name of the folder you put your pages in.
-
-
-
-
-
- Configuration for API settings. Learn more about API pages at [API Components](/api-playground/demo).
-
-
- The base url for all API endpoints. If `baseUrl` is an array, it will enable for multiple base url
- options that the user can toggle.
-
-
-
-
-
- The authentication strategy used for all API endpoints.
-
-
- The name of the authentication parameter used in the API playground.
-
- If method is `basic`, the format should be `[usernameName]:[passwordName]`
-
-
- The default value that's designed to be a prefix for the authentication input field.
-
- E.g. If an `inputPrefix` of `AuthKey` would inherit the default input result of the authentication field as `AuthKey`.
-
-
-
-
-
- Configurations for the API playground
-
-
-
- Whether the playground is showing, hidden, or only displaying the endpoint with no added user interactivity `simple`
-
- Learn more at the [playground guides](/api-playground/demo)
-
-
-
-
-
- Enabling this flag ensures that key ordering in OpenAPI pages matches the key ordering defined in the OpenAPI file.
-
- This behavior will soon be enabled by default, at which point this field will be deprecated.
-
-
-
-
-
-
- A string or an array of strings of URL(s) or relative path(s) pointing to your
- OpenAPI file.
-
- Examples:
-
- ```json Absolute
- "openapi": "https://example.com/openapi.json"
- ```
- ```json Relative
- "openapi": "/openapi.json"
- ```
- ```json Multiple
- "openapi": ["https://example.com/openapi1.json", "/openapi2.json", "/openapi3.json"]
- ```
-
-
-
-
-
- An object of social media accounts where the key:property pair represents the social media platform and the account url.
-
- Example:
- ```json
- {
- "twitter": "https://twitter.com/mintlify",
- "website": "https://mintlify.com"
- }
- ```
-
-
- One of the following values `website`, `facebook`, `twitter`, `discord`, `slack`, `github`, `linkedin`, `instagram`, `hacker-news`
-
- Example: `twitter`
-
-
- The URL to the social platform.
-
- Example: `https://twitter.com/mintlify`
-
-
-
-
-
- Configurations to enable feedback buttons
-
-
-
- Enables a button to allow users to suggest edits via pull requests
-
-
- Enables a button to allow users to raise an issue about the documentation
-
-
-
-
-
- Customize the dark mode toggle.
-
-
- Set if you always want to show light or dark mode for new users. When not
- set, we default to the same mode as the user's operating system.
-
-
- Set to true to hide the dark/light mode toggle. You can combine `isHidden` with `default` to force your docs to only use light or dark mode. For example:
-
-
- ```json Only Dark Mode
- "modeToggle": {
- "default": "dark",
- "isHidden": true
- }
- ```
-
- ```json Only Light Mode
- "modeToggle": {
- "default": "light",
- "isHidden": true
- }
- ```
-
-
-
-
-
-
-
-
- A background image to be displayed behind every page. See example with
- [Infisical](https://infisical.com/docs) and [FRPC](https://frpc.io).
-
diff --git a/apps/docs/favicon.ico b/apps/docs/favicon.ico
deleted file mode 100644
index 317ebcb2336e0833a22dddf0ab287849f26fda57..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 15086
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
diff --git a/apps/docs/github.mdx b/apps/docs/github.mdx
deleted file mode 100644
index f45b05f71..000000000
--- a/apps/docs/github.mdx
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: GitHub
----
-
-Gitroom uses GitHub for oAuth2 authentication during login and for the initial stars sync.
-To use GitHub open settings of either your profile or and organization and click on "Developers Settings".
-And it left menu, click on "oAuth Apps" and then "New oAuth App".
-
-In the `Authorization callback URL` add `http://localhost:4200/settings`
-Then copy the GitHub `Client ID` and `Client Secret` and paste them in the `.env` file.
-
-```env
-GITHUB_CLIENT_ID=""
-GITHUB_CLIENT_SECRET=""
-```
\ No newline at end of file
diff --git a/apps/docs/howitworks.mdx b/apps/docs/howitworks.mdx
deleted file mode 100644
index aa1fa7dc4..000000000
--- a/apps/docs/howitworks.mdx
+++ /dev/null
@@ -1,55 +0,0 @@
----
-title: How it works
-description: 'Learn the architecture of the project'
----
-
-The entire project is built under [NX](https://nx.dev/) to have a monorepo with multiple projects.
-Unlike other NX project, this project has one `.env` file that is shared between all the apps.
-It makes it easier to develop and deploy the project.
-When deploying to websites like [Railway](https://railway.app) or [Heroku](https://heroku.com), you can use a shared environment variables for all the apps.
-
-**At the moment it has 6 projects:**
-
-- [Frontend](#frontend) - Provides the Web user interface, talks to the Backend.
-- [Backend](#backend) - Does all the real work, provides an API for the frontend, and posts work to the redis queue.
-- [Workers](#worker) - Consumes work from the Redis Queue.
-- [Cron](#cron) - Run jobs at scheduled times.
-- [Docs](#docs) - This documentation site!
-
-
-
-## Architecture
-### Frontend
-The frontend is built with [NextJS](https://nextjs.org/) and [TailwindCSS](https://tailwindcss.com/).
-It works directly with the Backend to:
-- Show analytics
-- Schedule posts
-- Manage users
-
-### Backend
-The backend is built with [NestJS](https://nestjs.com/) with a basic architecture of controllers, services, repositories and dtos.
-It uses [Prisma](https://www.prisma.io/) as an ORM to interact with the database.
-By default Prisma uses [Postgres](https://www.postgresql.org/) as a database, but it can be easily changed to any other database since there are no native queries.
-It uses Redis to schedule posts and run background jobs.
-
-### Cron
-The backend is built with [NestJS](https://nestjs.com/) and share components with the backend.
-At the moment the use of the cron is:
-- Refresh tokens from different social media platforms.
-- Check for trending change every hour and inform users about it.
-- Sync the amount of stars for every repository at the end of the day.
-
-### Worker
-The backend is built with [NestJS](https://nestjs.com/) and share components with the backend.
-At the moment the use of the worker is:
-- Post scheduled posts to social media platforms.
-- Perform multiple jobs coming from the cron.
-
-### Docs
-The documentation website is built with [Mintlify](https://www.mintlify.com/).
-The reference in the documentation is being auto-generated by the backend.
-NestJS has a built-in Swagger module that generates a JSON file with all the routes and their documentation.
-It makes it very easy to track API changes and deploy them.
diff --git a/apps/docs/images/arch.png b/apps/docs/images/arch.png
deleted file mode 100644
index 2a45a0e52f8641f9176786125a7480029be5136d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 163764
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