diff --git a/apps/og/.eslintrc.js b/apps/og/.eslintrc.js
new file mode 100644
index 0000000..3cbadf9
--- /dev/null
+++ b/apps/og/.eslintrc.js
@@ -0,0 +1,8 @@
+module.exports = {
+ root: true,
+ extends: ["next", "prettier", "next/core-web-vitals"],
+ rules: {
+ "@next/next/no-html-link-for-pages": "off",
+ "react/jsx-key": "off",
+ },
+};
diff --git a/apps/og/README.md b/apps/og/README.md
new file mode 100644
index 0000000..ae0a26f
--- /dev/null
+++ b/apps/og/README.md
@@ -0,0 +1,7 @@
+# og
+
+[og.mareshq.com](https://og.mareshq.com)
+
+## Open Graph
+
+## Twitter card
diff --git a/apps/og/app/layout.tsx b/apps/og/app/layout.tsx
new file mode 100644
index 0000000..5f9491e
--- /dev/null
+++ b/apps/og/app/layout.tsx
@@ -0,0 +1,18 @@
+import { Analytics } from '@vercel/analytics/react'
+
+import './tailwind.css'
+
+const RootLayout = ({ children }: { children: React.ReactNode }) => {
+ return (
+
+
+
+
+ {children}
+
+
+
+ )
+}
+
+export default RootLayout
diff --git a/apps/og/app/page.tsx b/apps/og/app/page.tsx
new file mode 100644
index 0000000..ab87bc8
--- /dev/null
+++ b/apps/og/app/page.tsx
@@ -0,0 +1,21 @@
+import Link from "next/link"
+
+const Page = () => {
+ return (
+
+
+ Hello 👋
+
+ You found my OG / Twitter card image generator.
+
+
+ Interested in source code?{" "}
+
+ [github.com/vojtechmares/websites/og]
+
+
+
+ )
+}
+
+export default Page
diff --git a/apps/og/app/tailwind.css b/apps/og/app/tailwind.css
new file mode 100644
index 0000000..b5c61c9
--- /dev/null
+++ b/apps/og/app/tailwind.css
@@ -0,0 +1,3 @@
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
diff --git a/apps/og/next-env.d.ts b/apps/og/next-env.d.ts
new file mode 100644
index 0000000..4f11a03
--- /dev/null
+++ b/apps/og/next-env.d.ts
@@ -0,0 +1,5 @@
+///
+///
+
+// NOTE: This file should not be edited
+// see https://nextjs.org/docs/basic-features/typescript for more information.
diff --git a/apps/og/next.config.js b/apps/og/next.config.js
new file mode 100644
index 0000000..db7c6b2
--- /dev/null
+++ b/apps/og/next.config.js
@@ -0,0 +1,8 @@
+/** @type {import('next').NextConfig} */
+const nextConfig = {
+ reactStrictMode: true,
+ swcMinify: true,
+ pageExtensions: ["js", "jsx", "ts", "tsx",],
+};
+
+module.exports = nextConfig
diff --git a/apps/og/package.json b/apps/og/package.json
new file mode 100644
index 0000000..4083d3c
--- /dev/null
+++ b/apps/og/package.json
@@ -0,0 +1,36 @@
+{
+ "name": "og",
+ "version": "0.0.0",
+ "private": true,
+ "scripts": {
+ "dev": "next dev",
+ "build": "next build",
+ "start": "next start",
+ "lint": "next lint"
+ },
+ "dependencies": {
+ "@vercel/analytics": "^1.1.0",
+ "clsx": "^2.0.0",
+ "next": "13.5.4",
+ "react": "18.2.0",
+ "react-dom": "18.2.0"
+ },
+ "devDependencies": {
+ "@types/node": "^20.8.3",
+ "@types/react": "^18.2.25",
+ "autoprefixer": "^10.4.16",
+ "eslint": "8.51.0",
+ "eslint-config-next": "13.5.4",
+ "eslint-config-prettier": "^9.0.0",
+ "postcss": "^8.4.31",
+ "prettier": "^3.0.3",
+ "prettier-plugin-tailwindcss": "^0.5.5",
+ "tailwindcss": "^3.3.3",
+ "tsconfig": "workspace:*",
+ "typescript": "^5.2.2"
+ },
+ "engines": {
+ "node": "18.x"
+ },
+ "packageManager": "pnpm@8.8.0"
+}
diff --git a/apps/og/postcss.config.js b/apps/og/postcss.config.js
new file mode 100644
index 0000000..85f717c
--- /dev/null
+++ b/apps/og/postcss.config.js
@@ -0,0 +1,6 @@
+module.exports = {
+ plugins: {
+ tailwindcss: {},
+ autoprefixer: {}
+ }
+}
diff --git a/apps/og/prettier.config.cjs b/apps/og/prettier.config.cjs
new file mode 100644
index 0000000..58b0aee
--- /dev/null
+++ b/apps/og/prettier.config.cjs
@@ -0,0 +1,4 @@
+/** @type {import("prettier").Config} */
+module.exports = {
+ plugins: [require.resolve("prettier-plugin-tailwindcss")],
+};
diff --git a/apps/og/public/favicon.ico b/apps/og/public/favicon.ico
new file mode 100644
index 0000000..637997f
Binary files /dev/null and b/apps/og/public/favicon.ico differ
diff --git a/apps/og/tailwind.config.js b/apps/og/tailwind.config.js
new file mode 100644
index 0000000..858c168
--- /dev/null
+++ b/apps/og/tailwind.config.js
@@ -0,0 +1,10 @@
+module.exports = {
+ content: [
+ './app/**/*.{ts,tsx}',
+ './pages/**/*.{ts,tsx}',
+ './components/**/*.{ts,tsx}',
+ ],
+ theme: {
+ extend: {}
+ }
+}
diff --git a/apps/og/tsconfig.json b/apps/og/tsconfig.json
new file mode 100644
index 0000000..5fa7c46
--- /dev/null
+++ b/apps/og/tsconfig.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://json.schemastore.org/tsconfig",
+ "extends": "tsconfig/nextjs.json",
+ "include": [
+ "next-env.d.ts",
+ "**/*.ts",
+ "**/*.tsx",
+ ".next/types/**/*.ts"
+ ],
+ "compilerOptions": {
+ "baseUrl": ".",
+ "paths": {
+ "@/*": [
+ "./*"
+ ]
+ },
+ "strictNullChecks": true
+ }
+}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 9a43082..8e14cf9 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -27,6 +27,61 @@ importers:
specifier: ^1.10.12
version: 1.10.15
+ apps/og:
+ dependencies:
+ '@vercel/analytics':
+ specifier: ^1.1.0
+ version: 1.1.0
+ clsx:
+ specifier: ^2.0.0
+ version: 2.0.0
+ next:
+ specifier: 13.5.4
+ version: 13.5.4(@babel/core@7.23.0)(react-dom@18.2.0)(react@18.2.0)
+ react:
+ specifier: 18.2.0
+ version: 18.2.0
+ react-dom:
+ specifier: 18.2.0
+ version: 18.2.0(react@18.2.0)
+ devDependencies:
+ '@types/node':
+ specifier: ^20.8.3
+ version: 20.8.3
+ '@types/react':
+ specifier: ^18.2.25
+ version: 18.2.25
+ autoprefixer:
+ specifier: ^10.4.16
+ version: 10.4.16(postcss@8.4.31)
+ eslint:
+ specifier: 8.51.0
+ version: 8.51.0
+ eslint-config-next:
+ specifier: 13.5.4
+ version: 13.5.4(eslint@8.51.0)(typescript@5.2.2)
+ eslint-config-prettier:
+ specifier: ^9.0.0
+ version: 9.0.0(eslint@8.51.0)
+ postcss:
+ specifier: ^8.4.31
+ version: 8.4.31
+ prettier:
+ specifier: ^3.0.3
+ version: 3.0.3
+ prettier-plugin-tailwindcss:
+ specifier: ^0.5.5
+ version: 0.5.5(prettier@3.0.3)
+ tailwindcss:
+ specifier: ^3.3.3
+ version: 3.3.3
+ tsconfig:
+ specifier: workspace:*
+ version: link:../../packages/tsconfig
+ typescript:
+ specifier: ^5.2.2
+ version: 5.2.2
+
apps/vojtechmares.com:
dependencies:
'@mdx-js/loader':
@@ -561,8 +616,8 @@ packages:
ajv: 6.12.6
debug: 4.3.4
espree: 9.6.1
- globals: 13.19.0
- ignore: 5.2.0
+ globals: 13.23.0
+ ignore: 5.2.4
import-fresh: 3.3.0
js-yaml: 4.1.0
minimatch: 3.1.2
@@ -2579,13 +2634,6 @@ packages:
resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
engines: {node: '>=4'}
- /globals@13.19.0:
- resolution: {integrity: sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==}
- engines: {node: '>=8'}
- dependencies:
- type-fest: 0.20.2
- dev: true
-
/globals@13.23.0:
resolution: {integrity: sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==}
engines: {node: '>=8'}
@@ -2729,11 +2777,6 @@ packages:
safer-buffer: 2.1.2
dev: true
- /ignore@5.2.0:
- resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==}
- engines: {node: '>= 4'}
- dev: true
-
/ignore@5.2.4:
resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==}
engines: {node: '>= 4'}