From 891df736fa54d229916d59272ec4ebab07535057 Mon Sep 17 00:00:00 2001 From: oiov Date: Mon, 29 Jul 2024 17:44:43 +0800 Subject: [PATCH] chore --- README.md | 66 +++++++++++++++++++++ app/(protected)/dashboard/records/page.tsx | 2 +- app/(protected)/dashboard/urls/page.tsx | 2 +- app/(protected)/dashboard/urls/url-list.tsx | 29 +++++---- components/forms/newsletter-form.tsx | 2 +- components/layout/site-footer.tsx | 9 +++ config/docs.ts | 27 +++++++-- config/site.ts | 3 +- 8 files changed, 120 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index e69de29..d500b37 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,66 @@ +
+

๐–๐‘.๐ƒ๐Ž

+

Discord ยท English | ็ฎ€ไฝ“ไธญๆ–‡

+

Temporary email service build with email worker.

+ +
+ +## Features + +- ๐ŸŽฏ Privacy-friendly, no registration required, out-of-the-box +- โœˆ๏ธ Support email sending and receiving +- โœจ Support saving passwords and retrieving email addresses +- ๐Ÿ˜„ Support multiple domain name suffixes +- ๐Ÿš€ 100% open source, quick deployment, no server required + +Principles๏ผš + +- Receiving emails (email worker) +- Display email (remix) +- Mail Storage (sqlite) +- [Nodejs](https://nodejs.org) >= 18 + +> Worker receives email -> saves to database -> client queries email + +## Self-hosted Tutorial + +### Requirements + +- [Cloudflare](https://dash.cloudflare.com/) account and a domain name hosted on Cloudflare +- [turso](https://turso.tech) sqlite (a free plan available for personal use) +- [Vercel](https://vercel.com) or [fly.io](https://fly.io) to deploy Remix app + +### Receiving Emails steps + +See [receive-tutorial-en.md](/docs//receive-tutorial-en.md) + +### Sending Emails steps + +See [send-tutorial-en.md](/docs/send-tutorial-en.md) + +## Local development + +copy `apps/remix/.env.example` to `apps/remix/.env` and fill in the necessary environment variables. + +```bash +git clone https://github.com/oiov/vmail +cd vmail +pnpm install + +# run on localhost:3000 +pnpm run remix:dev +``` + +## Community Group + +- Discord: https://discord.gg/d68kWCBDEs + +## License + +GNU General Public License v3.0 + +## Star History + +[![Star History Chart](https://api.star-history.com/svg?repos=oiov/vmail&type=Date)](https://star-history.com/#oiov/vmail&Date) + +Inspired by smail.pw & email.ml \ No newline at end of file diff --git a/app/(protected)/dashboard/records/page.tsx b/app/(protected)/dashboard/records/page.tsx index 03cf961..2dae5fd 100644 --- a/app/(protected)/dashboard/records/page.tsx +++ b/app/(protected)/dashboard/records/page.tsx @@ -19,7 +19,7 @@ export default async function DashboardPage() { return ( <> - - + + + - - + + @@ -59,6 +60,7 @@ function TableColumnSekleton({ className }: { className?: string }) { } export default function UserUrlsList({ user }: UrlListProps) { + const { isMobile } = useMediaQuery(); const [isShowForm, setShowForm] = useState(false); const [formType, setFormType] = useState("add"); const [currentEditUrl, setCurrentEditUrl] = useState( @@ -127,11 +129,11 @@ export default function UserUrlsList({ user }: UrlListProps) { )} - - + + Target - + Url @@ -154,17 +156,20 @@ export default function UserUrlsList({ user }: UrlListProps) { ) : data && data.length > 0 ? ( data.map((short) => ( - - + + - {short.target} + {short.target.startsWith("http") + ? short.target.split("//")[1] + : short.target} + {/* {isMobile ? short.target.split("//")[1] :short.target} */} - + diff --git a/components/layout/site-footer.tsx b/components/layout/site-footer.tsx index 9307a35..e19a1f4 100644 --- a/components/layout/site-footer.tsx +++ b/components/layout/site-footer.tsx @@ -56,6 +56,15 @@ export function SiteFooter({ className }: React.HTMLAttributes) { className="font-medium text-primary underline underline-offset-2" > Nextjs + {" "} + &{" "} + + Cloudflare .

diff --git a/config/docs.ts b/config/docs.ts index 57fff7d..2513b31 100644 --- a/config/docs.ts +++ b/config/docs.ts @@ -12,18 +12,37 @@ export const docsConfig: DocsConfig = { icon: "page", }, { - title: "Installation", - href: "/docs/installation", + title: "Quick Start", + href: "/docs/quick-start", + icon: "page", + }, + { + title: "DNS Records", + href: "/docs/dns-records", + icon: "page", + }, + { + title: "Short URLs", + href: "/docs/short-urls", + icon: "page", + }, + { + title: "Newsletter", + href: "/docs/newsletter", icon: "page", }, ], }, { - title: "Configuration", + title: "Developer", items: [ + { + title: "Installation", + href: "/docs/installation", + icon: "page", + }, { title: "Authentification", - // title: "Blog", href: "/docs/configuration/authentification", icon: "page", }, diff --git a/config/site.ts b/config/site.ts index 6b415f8..d248466 100644 --- a/config/site.ts +++ b/config/site.ts @@ -7,7 +7,7 @@ const free_url_quota = env.NEXT_PUBLIC_FREE_URL_QUOTA; const open_signup = env.NEXT_PUBLIC_OPEN_SIGNUP; export const siteConfig: SiteConfig = { - name: "WR.DO", + name: "๐–๐‘.๐ƒ๐Ž", description: "A DNS record distribution system", url: site_url, ogImage: `${site_url}/_static/og.jpg`, @@ -46,6 +46,7 @@ export const footerLinks: SidebarNavItem[] = [ items: [ { title: "Introduction", href: "/docs" }, { title: "Guide", href: "/docs/quick-start" }, + { title: "Developer", href: "/docs/developer" }, ], }, ];