diff --git a/apps/partners/.eslintrc.json b/apps/partners/.eslintrc.json
new file mode 100644
index 00000000..bffb357a
--- /dev/null
+++ b/apps/partners/.eslintrc.json
@@ -0,0 +1,3 @@
+{
+ "extends": "next/core-web-vitals"
+}
diff --git a/apps/partners/.gitignore b/apps/partners/.gitignore
new file mode 100644
index 00000000..fd3dbb57
--- /dev/null
+++ b/apps/partners/.gitignore
@@ -0,0 +1,36 @@
+# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
+
+# dependencies
+/node_modules
+/.pnp
+.pnp.js
+.yarn/install-state.gz
+
+# testing
+/coverage
+
+# next.js
+/.next/
+/out/
+
+# production
+/build
+
+# misc
+.DS_Store
+*.pem
+
+# debug
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# local env files
+.env*.local
+
+# vercel
+.vercel
+
+# typescript
+*.tsbuildinfo
+next-env.d.ts
diff --git a/apps/partners/README.md b/apps/partners/README.md
new file mode 100644
index 00000000..c4033664
--- /dev/null
+++ b/apps/partners/README.md
@@ -0,0 +1,36 @@
+This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).
+
+## Getting Started
+
+First, run the development server:
+
+```bash
+npm run dev
+# or
+yarn dev
+# or
+pnpm dev
+# or
+bun dev
+```
+
+Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
+
+You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.
+
+This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font.
+
+## Learn More
+
+To learn more about Next.js, take a look at the following resources:
+
+- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
+- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
+
+You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!
+
+## Deploy on Vercel
+
+The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
+
+Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.
diff --git a/apps/partners/next.config.mjs b/apps/partners/next.config.mjs
new file mode 100644
index 00000000..f46c0848
--- /dev/null
+++ b/apps/partners/next.config.mjs
@@ -0,0 +1,17 @@
+/** @type {import('next').NextConfig} */
+const nextConfig = {
+ transpilePackages: ["@umamin/ui", "@umamin/db", "@umamin/gql"],
+ compiler: {
+ removeConsole: process.env.NODE_ENV === "production",
+ },
+ images: {
+ remotePatterns: [
+ {
+ protocol: "https",
+ hostname: "lh3.googleusercontent.com",
+ },
+ ],
+ },
+};
+
+export default nextConfig;
diff --git a/apps/partners/package.json b/apps/partners/package.json
new file mode 100644
index 00000000..56036055
--- /dev/null
+++ b/apps/partners/package.json
@@ -0,0 +1,57 @@
+{
+ "name": "partners",
+ "version": "0.1.0",
+ "private": true,
+ "scripts": {
+ "dev": "next dev",
+ "build": "next build",
+ "start": "next start",
+ "lint": "next lint"
+ },
+ "dependencies": {
+ "@graphql-yoga/plugin-csrf-prevention": "^3.6.2",
+ "@graphql-yoga/plugin-disable-introspection": "^2.6.2",
+ "@graphql-yoga/plugin-persisted-operations": "^3.6.2",
+ "@graphql-yoga/plugin-response-cache": "^3.8.2",
+ "@lucia-auth/adapter-drizzle": "^1.0.7",
+ "@urql/core": "^5.0.5",
+ "@urql/exchange-graphcache": "^7.1.1",
+ "@urql/exchange-persisted": "^4.3.0",
+ "@urql/next": "^1.1.1",
+ "date-fns": "^3.6.0",
+ "geist": "^1.3.1",
+ "arctic": "^1.9.2",
+ "gql.tada": "^1.8.5",
+ "graphql": "^16.9.0",
+ "graphql-yoga": "^5.6.2",
+ "lucia": "^3.2.0",
+ "lucide-react": "^0.407.0",
+ "modern-screenshot": "^4.4.39",
+ "react-intersection-observer": "^9.10.2",
+ "urql": "^4.1.0",
+ "zod": "^3.22.4",
+ "sonner": "^1.5.0",
+ "nanoid": "^5.0.7",
+ "@whatwg-node/server": "^0.9.46",
+ "@umamin/db": "workspace:*",
+ "@umamin/gql": "workspace:*",
+ "@umamin/ui": "workspace:*",
+ "react": "^18",
+ "react-dom": "^18",
+ "next": "14.2.5"
+ },
+ "devDependencies": {
+ "@0no-co/graphqlsp": "^1.12.12",
+ "@umamin/eslint-config": "workspace:*",
+ "@umamin/tsconfig": "workspace:*",
+ "typescript": "^5",
+ "@types/node": "^20",
+ "@types/react": "^18",
+ "@types/react-dom": "^18",
+ "autoprefixer": "^10.0.1",
+ "postcss": "^8",
+ "tailwindcss": "^3.4.1",
+ "eslint": "^8",
+ "eslint-config-next": "14.2.5"
+ }
+}
diff --git a/apps/partners/postcss.config.cjs b/apps/partners/postcss.config.cjs
new file mode 100644
index 00000000..a4917b21
--- /dev/null
+++ b/apps/partners/postcss.config.cjs
@@ -0,0 +1 @@
+module.exports = require("@umamin/ui/postcss.config");
diff --git a/apps/partners/public/next.svg b/apps/partners/public/next.svg
new file mode 100644
index 00000000..5174b28c
--- /dev/null
+++ b/apps/partners/public/next.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/partners/public/vercel.svg b/apps/partners/public/vercel.svg
new file mode 100644
index 00000000..d2f84222
--- /dev/null
+++ b/apps/partners/public/vercel.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/partners/src/app/favicon.ico b/apps/partners/src/app/favicon.ico
new file mode 100644
index 00000000..718d6fea
Binary files /dev/null and b/apps/partners/src/app/favicon.ico differ
diff --git a/apps/partners/src/app/layout.tsx b/apps/partners/src/app/layout.tsx
new file mode 100644
index 00000000..1652f1d9
--- /dev/null
+++ b/apps/partners/src/app/layout.tsx
@@ -0,0 +1,65 @@
+import type { Metadata, Viewport } from "next";
+import { GeistSans } from "geist/font/sans";
+import "@umamin/ui/globals.css";
+
+export const viewport: Viewport = {
+ width: "device-width",
+ initialScale: 1,
+ themeColor: "black",
+};
+
+export const metadata: Metadata = {
+ metadataBase: new URL("https://partners.umamin.link"),
+ alternates: {
+ canonical: "/",
+ },
+ title: "Umamin Partners — Anonymity at Scale",
+ authors: [{ name: "Omsimos Collective" }],
+ description:
+ "Umamin Partners provides powerful tools that are Ideal for businesses, organizations, or individuals dealing with large volumes of anonymous feedback, surveys, or communications. It combines the security and privacy of the core platform with powerful management tools to optimize workflow.",
+ keywords: [
+ "anonymous messaging",
+ "open-source platform",
+ "encrypted messages",
+ "privacy",
+ "anonymity",
+ ],
+ openGraph: {
+ type: "website",
+ siteName: "Umamin Partners",
+ url: "https://social.umamin.link",
+ title: "Umamin Partners — Anonymity at Scale",
+ description:
+ "Umamin Partners provides powerful tools that are Ideal for businesses, organizations, or individuals dealing with large volumes of anonymous feedback, surveys, or communications. It combines the security and privacy of the core platform with powerful management tools to optimize workflow.",
+ },
+ twitter: {
+ card: "summary_large_image",
+ title: "Umamin Partners — Anonymity at Scale",
+ description:
+ "Umamin Partners provides powerful tools that are Ideal for businesses, organizations, or individuals dealing with large volumes of anonymous feedback, surveys, or communications. It combines the security and privacy of the core platform with powerful management tools to optimize workflow.",
+ },
+ robots: {
+ index: true,
+ follow: true,
+ googleBot: {
+ index: true,
+ follow: true,
+ noimageindex: false,
+ "max-video-preview": -1,
+ "max-image-preview": "large",
+ "max-snippet": -1,
+ },
+ },
+};
+
+export default function RootLayout({
+ children,
+}: Readonly<{
+ children: React.ReactNode;
+}>) {
+ return (
+
+
{children}
+
+ );
+}
diff --git a/apps/partners/src/app/page.tsx b/apps/partners/src/app/page.tsx
new file mode 100644
index 00000000..2acfd440
--- /dev/null
+++ b/apps/partners/src/app/page.tsx
@@ -0,0 +1,113 @@
+import Image from "next/image";
+
+export default function Home() {
+ return (
+
+
+
+ Get started by editing
+ src/app/page.tsx
+
+
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/apps/partners/tailwind.config.ts b/apps/partners/tailwind.config.ts
new file mode 100644
index 00000000..544d0407
--- /dev/null
+++ b/apps/partners/tailwind.config.ts
@@ -0,0 +1 @@
+export * from "@umamin/ui/tailwind.config";
diff --git a/apps/partners/tsconfig.json b/apps/partners/tsconfig.json
new file mode 100644
index 00000000..7b285893
--- /dev/null
+++ b/apps/partners/tsconfig.json
@@ -0,0 +1,26 @@
+{
+ "compilerOptions": {
+ "lib": ["dom", "dom.iterable", "esnext"],
+ "allowJs": true,
+ "skipLibCheck": true,
+ "strict": true,
+ "noEmit": true,
+ "esModuleInterop": true,
+ "module": "esnext",
+ "moduleResolution": "bundler",
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "jsx": "preserve",
+ "incremental": true,
+ "plugins": [
+ {
+ "name": "next"
+ }
+ ],
+ "paths": {
+ "@/*": ["./src/*"]
+ }
+ },
+ "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
+ "exclude": ["node_modules"]
+}
diff --git a/package.json b/package.json
index cb9a043d..26add3ba 100644
--- a/package.json
+++ b/package.json
@@ -2,13 +2,14 @@
"name": "umamin",
"private": true,
"scripts": {
- "build": "turbo run build --filter=!./apps/social --filter=!./packages/e2e",
+ "build": "turbo run build",
"dev": "turbo run dev",
"test": "turbo run test",
- "start": "turbo run start --filter=!./apps/social",
+ "start": "turbo run start",
"dev:test": "pnpm --filter @umamin/e2e dev:test",
- "dev:www": "turbo run dev --filter=!./apps/social",
- "dev:social": "turbo run dev --filter=!./apps/www",
+ "dev:www": "turbo run dev --filter=www --filter=@umamin/db",
+ "dev:social": "turbo run dev --filter=social --filter=@umamin/db",
+ "dev:partners": "turbo run dev --filter=partners --filter=@umamin/db",
"build:www": "turbo run build --filter=!./apps/social",
"build:social": "turbo run build --filter=!./apps/www",
"gql:check": "pnpm --filter www gql:check",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index bf41306d..bff61934 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -24,6 +24,136 @@ importers:
specifier: ^5.5.4
version: 5.5.4
+ apps/partners:
+ dependencies:
+ '@graphql-yoga/plugin-csrf-prevention':
+ specifier: ^3.6.2
+ version: 3.6.2(graphql-yoga@5.6.2(graphql@16.9.0))
+ '@graphql-yoga/plugin-disable-introspection':
+ specifier: ^2.6.2
+ version: 2.6.2(graphql-yoga@5.6.2(graphql@16.9.0))(graphql@16.9.0)
+ '@graphql-yoga/plugin-persisted-operations':
+ specifier: ^3.6.2
+ version: 3.6.2(@graphql-tools/utils@10.3.2(graphql@16.9.0))(graphql-yoga@5.6.2(graphql@16.9.0))(graphql@16.9.0)
+ '@graphql-yoga/plugin-response-cache':
+ specifier: ^3.8.2
+ version: 3.8.2(@envelop/core@5.0.1)(graphql-yoga@5.6.2(graphql@16.9.0))(graphql@16.9.0)
+ '@lucia-auth/adapter-drizzle':
+ specifier: ^1.0.7
+ version: 1.0.7(lucia@3.2.0)
+ '@umamin/db':
+ specifier: workspace:*
+ version: link:../../packages/db
+ '@umamin/gql':
+ specifier: workspace:*
+ version: link:../../packages/gql
+ '@umamin/ui':
+ specifier: workspace:*
+ version: link:../../packages/ui
+ '@urql/core':
+ specifier: ^5.0.5
+ version: 5.0.5(graphql@16.9.0)
+ '@urql/exchange-graphcache':
+ specifier: ^7.1.1
+ version: 7.1.2(@urql/core@5.0.5(graphql@16.9.0))(graphql@16.9.0)
+ '@urql/exchange-persisted':
+ specifier: ^4.3.0
+ version: 4.3.0(@urql/core@5.0.5(graphql@16.9.0))
+ '@urql/next':
+ specifier: ^1.1.1
+ version: 1.1.1(next@14.2.5(@opentelemetry/api@1.9.0)(@playwright/test@1.45.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(urql@4.1.0(@urql/core@5.0.5(graphql@16.9.0))(react@18.3.1))
+ '@whatwg-node/server':
+ specifier: ^0.9.46
+ version: 0.9.46
+ arctic:
+ specifier: ^1.9.2
+ version: 1.9.2
+ date-fns:
+ specifier: ^3.6.0
+ version: 3.6.0
+ geist:
+ specifier: ^1.3.1
+ version: 1.3.1(next@14.2.5(@opentelemetry/api@1.9.0)(@playwright/test@1.45.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ gql.tada:
+ specifier: ^1.8.5
+ version: 1.8.5(graphql@16.9.0)(typescript@5.5.4)
+ graphql:
+ specifier: ^16.9.0
+ version: 16.9.0
+ graphql-yoga:
+ specifier: ^5.6.2
+ version: 5.6.2(graphql@16.9.0)
+ lucia:
+ specifier: ^3.2.0
+ version: 3.2.0
+ lucide-react:
+ specifier: ^0.407.0
+ version: 0.407.0(react@18.3.1)
+ modern-screenshot:
+ specifier: ^4.4.39
+ version: 4.4.39
+ nanoid:
+ specifier: ^5.0.7
+ version: 5.0.7
+ next:
+ specifier: 14.2.5
+ version: 14.2.5(@opentelemetry/api@1.9.0)(@playwright/test@1.45.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react:
+ specifier: ^18
+ version: 18.3.1
+ react-dom:
+ specifier: ^18
+ version: 18.3.1(react@18.3.1)
+ react-intersection-observer:
+ specifier: ^9.10.2
+ version: 9.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ sonner:
+ specifier: ^1.5.0
+ version: 1.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ urql:
+ specifier: ^4.1.0
+ version: 4.1.0(@urql/core@5.0.5(graphql@16.9.0))(react@18.3.1)
+ zod:
+ specifier: ^3.22.4
+ version: 3.23.8
+ devDependencies:
+ '@0no-co/graphqlsp':
+ specifier: ^1.12.12
+ version: 1.12.12(graphql@16.9.0)(typescript@5.5.4)
+ '@types/node':
+ specifier: ^20
+ version: 20.14.13
+ '@types/react':
+ specifier: ^18
+ version: 18.3.3
+ '@types/react-dom':
+ specifier: ^18
+ version: 18.3.0
+ '@umamin/eslint-config':
+ specifier: workspace:*
+ version: link:../../packages/eslint
+ '@umamin/tsconfig':
+ specifier: workspace:*
+ version: link:../../packages/tsconfig
+ autoprefixer:
+ specifier: ^10.0.1
+ version: 10.4.19(postcss@8.4.40)
+ eslint:
+ specifier: ^8
+ version: 8.57.0
+ eslint-config-next:
+ specifier: 14.2.5
+ version: 14.2.5(eslint@8.57.0)(typescript@5.5.4)
+ postcss:
+ specifier: ^8
+ version: 8.4.40
+ tailwindcss:
+ specifier: ^3.4.1
+ version: 3.4.7
+ typescript:
+ specifier: ^5
+ version: 5.5.4
+
apps/social:
dependencies:
'@graphql-yoga/plugin-apq':