<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Gmail on Producthunt daily</title>
        <link>https://producthunt.programnotes.cn/en/tags/gmail/</link>
        <description>Recent content in Gmail on Producthunt daily</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en</language>
        <lastBuildDate>Sat, 21 Jun 2025 15:27:44 +0800</lastBuildDate><atom:link href="https://producthunt.programnotes.cn/en/tags/gmail/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Zero</title>
        <link>https://producthunt.programnotes.cn/en/p/zero/</link>
        <pubDate>Sat, 21 Jun 2025 15:27:44 +0800</pubDate>
        
        <guid>https://producthunt.programnotes.cn/en/p/zero/</guid>
        <description>&lt;img src="https://images.unsplash.com/photo-1636664138696-d3a2a67b8125?ixid=M3w0NjAwMjJ8MHwxfHJhbmRvbXx8fHx8fHx8fDE3NTA0OTA4MDd8&amp;ixlib=rb-4.1.0" alt="Featured image of post Zero" /&gt;&lt;h1 id=&#34;mail-0zero&#34;&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/Mail-0/Zero&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Mail-0/Zero&lt;/a&gt;
&lt;/h1&gt;&lt;p align=&#34;center&#34;&gt;
  &lt;picture&gt;
    &lt;source srcset=&#34;apps/mail/public/white-icon.svg&#34; media=&#34;(prefers-color-scheme: dark)&#34;&gt;
    &lt;img src=&#34;apps/mail/public/black-icon.svg&#34; alt=&#34;Zero Logo&#34; width=&#34;64&#34; style=&#34;background-color: #000; padding: 10px;&#34;/&gt;
  &lt;/picture&gt;
&lt;/p&gt;
&lt;h1 id=&#34;zero&#34;&gt;Zero
&lt;/h1&gt;&lt;p&gt;An Open-Source Gmail Alternative for the Future of Email&lt;/p&gt;
&lt;h2 id=&#34;what-is-zero&#34;&gt;What is Zero?
&lt;/h2&gt;&lt;p&gt;Zero is an open-source AI email solution that gives users the power to &lt;strong&gt;self-host&lt;/strong&gt; their own email app while also integrating external services like Gmail and other email providers. Our goal is to modernize and improve emails through AI agents to truly modernize emails.&lt;/p&gt;
&lt;h2 id=&#34;why-zero&#34;&gt;Why Zero?
&lt;/h2&gt;&lt;p&gt;Most email services today are either &lt;strong&gt;closed-source&lt;/strong&gt;, &lt;strong&gt;data-hungry&lt;/strong&gt;, or &lt;strong&gt;too complex to self-host&lt;/strong&gt;.
0.email is different:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;✅ &lt;strong&gt;Open-Source&lt;/strong&gt; – No hidden agendas, fully transparent.&lt;/li&gt;
&lt;li&gt;🦾 &lt;strong&gt;AI Driven&lt;/strong&gt; - Enhance your emails with Agents &amp;amp; LLMs.&lt;/li&gt;
&lt;li&gt;🔒 &lt;strong&gt;Data Privacy First&lt;/strong&gt; – Your emails, your data. Zero does not track, collect, or sell your data in any way. Please note: while we integrate with external services, the data passed through them is not under our control and falls under their respective privacy policies and terms of service.&lt;/li&gt;
&lt;li&gt;⚙️ &lt;strong&gt;Self-Hosting Freedom&lt;/strong&gt; – Run your own email app with ease.&lt;/li&gt;
&lt;li&gt;📬 &lt;strong&gt;Unified Inbox&lt;/strong&gt; – Connect multiple email providers like Gmail, Outlook, and more.&lt;/li&gt;
&lt;li&gt;🎨 &lt;strong&gt;Customizable UI &amp;amp; Features&lt;/strong&gt; – Tailor your email experience the way you want it.&lt;/li&gt;
&lt;li&gt;🚀 &lt;strong&gt;Developer-Friendly&lt;/strong&gt; – Built with extensibility and integrations in mind.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;tech-stack&#34;&gt;Tech Stack
&lt;/h2&gt;&lt;p&gt;Zero is built with modern and reliable technologies:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Frontend&lt;/strong&gt;: Next.js, React, TypeScript, TailwindCSS, Shadcn UI&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Backend&lt;/strong&gt;: Node.js, Drizzle ORM&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Database&lt;/strong&gt;: PostgreSQL&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Authentication&lt;/strong&gt;: Better Auth, Google OAuth&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- - **Testing**: Jest, React Testing Library --&gt;
&lt;h2 id=&#34;getting-started&#34;&gt;Getting Started
&lt;/h2&gt;&lt;h3 id=&#34;prerequisites&#34;&gt;Prerequisites
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;Required Versions:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://nodejs.org/en/download&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Node.js&lt;/a&gt; (v18 or higher)&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://pnpm.io&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;pnpm&lt;/a&gt; (v10 or higher)&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://docs.docker.com/engine/install/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Docker&lt;/a&gt; (v20 or higher)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before running the application, you&amp;rsquo;ll need to set up services and configure environment variables. For more details on environment variables, see the &lt;a class=&#34;link&#34; href=&#34;#environment-variables&#34; &gt;Environment Variables&lt;/a&gt; section.&lt;/p&gt;
&lt;h3 id=&#34;setup-options&#34;&gt;Setup Options
&lt;/h3&gt;&lt;p&gt;You can set up Zero in two ways:&lt;/p&gt;
&lt;details open&gt;
&lt;summary&gt;&lt;b&gt;Standard Setup (Recommended)&lt;/b&gt;&lt;/summary&gt;
&lt;h4 id=&#34;quick-start-guide&#34;&gt;Quick Start Guide
&lt;/h4&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Clone and Install&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Clone the repository&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://github.com/Mail-0/Zero.git
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; Zero
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Install dependencies&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pnpm install
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Start database locally&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pnpm docker:db:up
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Set Up Environment&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Run &lt;code&gt;pnpm nizzy env&lt;/code&gt; to setup your environment variables&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;pnpm nizzy sync&lt;/code&gt; to sync your environment variables and types&lt;/li&gt;
&lt;li&gt;Start the database with the provided docker compose setup: &lt;code&gt;pnpm docker:db:up&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Initialize the database: &lt;code&gt;pnpm db:push&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Start the App&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pnpm dev
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Open in Browser&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Visit &lt;a class=&#34;link&#34; href=&#34;http://localhost:3000&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://localhost:3000&lt;/a&gt;&lt;/p&gt;
&lt;/details&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;details open&gt;
&lt;summary&gt;&lt;b&gt;Devcontainer Setup&lt;/b&gt;&lt;/summary&gt;
&lt;h4 id=&#34;quick-start-guide-1&#34;&gt;Quick Start guide
&lt;/h4&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Clone and Install&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Clone the repository&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://github.com/Mail-0/Zero.git
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; Zero
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Then open the code in devcontainer and install the dependencies:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pnpm install
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# Start the database locally
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pnpm docker:db:up
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Set Up Environment&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Run &lt;code&gt;pnpm nizzy env&lt;/code&gt; to setup your environment variables&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;pnpm nizzy sync&lt;/code&gt; to sync your environment variables and types&lt;/li&gt;
&lt;li&gt;Start the database with the provided docker compose setup: &lt;code&gt;pnpm docker:db:up&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Initialize the database: &lt;code&gt;pnpm db:push&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Start The App&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pnpm dev
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Visit &lt;a class=&#34;link&#34; href=&#34;http://localhost:3000&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://localhost:3000&lt;/a&gt;&lt;/p&gt;
  &lt;/details&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;environment-setup&#34;&gt;Environment Setup
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Better Auth Setup&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Open the &lt;code&gt;.env&lt;/code&gt; file and change the BETTER_AUTH_SECRET to a random string. (Use &lt;code&gt;openssl rand -hex 32&lt;/code&gt; to generate a 32 character string)&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-env&#34; data-lang=&#34;env&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;BETTER_AUTH_SECRET&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;your_secret_key
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Google OAuth Setup&lt;/strong&gt; (Required for Gmail integration)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Go to &lt;a class=&#34;link&#34; href=&#34;https://console.cloud.google.com&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Google Cloud Console&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create a new project&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add the following APIs in your Google Cloud Project: &lt;a class=&#34;link&#34; href=&#34;https://console.cloud.google.com/apis/library/people.googleapis.com&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;People API&lt;/a&gt;, &lt;a class=&#34;link&#34; href=&#34;https://console.cloud.google.com/apis/library/gmail.googleapis.com&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Gmail API&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use the links above and click &amp;lsquo;Enable&amp;rsquo; or&lt;/li&gt;
&lt;li&gt;Go to &amp;lsquo;APIs and Services&amp;rsquo; &amp;gt; &amp;lsquo;Enable APIs and Services&amp;rsquo; &amp;gt; Search for &amp;lsquo;Google People API&amp;rsquo; and click &amp;lsquo;Enable&amp;rsquo;&lt;/li&gt;
&lt;li&gt;Go to &amp;lsquo;APIs and Services&amp;rsquo; &amp;gt; &amp;lsquo;Enable APIs and Services&amp;rsquo; &amp;gt; Search for &amp;lsquo;Gmail API&amp;rsquo; and click &amp;lsquo;Enable&amp;rsquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Enable the Google OAuth2 API&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create OAuth 2.0 credentials (Web application type)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add authorized redirect URIs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Development:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;http://localhost:8787/api/auth/callback/google&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Production:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;https://your-production-url/api/auth/callback/google&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add to &lt;code&gt;.env&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-env&#34; data-lang=&#34;env&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;GOOGLE_CLIENT_ID&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;your_client_id
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;GOOGLE_CLIENT_SECRET&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;your_client_secret
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add yourself as a test user:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Go to &lt;a class=&#34;link&#34; href=&#34;https://console.cloud.google.com/auth/audience&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;code&gt;Audience&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Under &amp;lsquo;Test users&amp;rsquo; click &amp;lsquo;Add Users&amp;rsquo;&lt;/li&gt;
&lt;li&gt;Add your email and click &amp;lsquo;Save&amp;rsquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;[!WARNING]
The authorized redirect URIs in Google Cloud Console must match &lt;strong&gt;exactly&lt;/strong&gt; what you configure in the &lt;code&gt;.env&lt;/code&gt;, including the protocol (http/https), domain, and path - these are provided above.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Autumn Setup&lt;/strong&gt; (Required for some encryption)&lt;/p&gt;
&lt;p&gt;-Go to &lt;a class=&#34;link&#34; href=&#34;https://useautumn.com/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Autumn&lt;/a&gt;
-For Local Use, click &lt;a class=&#34;link&#34; href=&#34;https://app.useautumn.com/sandbox/onboarding&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;onboarding&lt;/a&gt; button and generate an Autumn Secret Key
-For production, select the production mode from upper left corner and generate an fill the other fields. After that, generate an Autumn Secret Key&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Add to &lt;code&gt;.env&lt;/code&gt;:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-env&#34; data-lang=&#34;env&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;AUTUMN_SECRET_KEY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;your_autumn_secret
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;environment-variables&#34;&gt;Environment Variables
&lt;/h3&gt;&lt;p&gt;Run &lt;code&gt;pnpm nizzy env&lt;/code&gt; to setup your environment variables. It will copy the &lt;code&gt;.env.example&lt;/code&gt; file to &lt;code&gt;.env&lt;/code&gt; and fill in the variables for you.
For local development a connection string example is provided in the &lt;code&gt;.env.example&lt;/code&gt; file located in the same folder as the database.&lt;/p&gt;
&lt;h3 id=&#34;database-setup&#34;&gt;Database Setup
&lt;/h3&gt;&lt;p&gt;Zero uses PostgreSQL for storing data. Here&amp;rsquo;s how to set it up:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Start the Database&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Run this command to start a local PostgreSQL instance:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pnpm docker:db:up
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;This creates a database with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Name: &lt;code&gt;zerodotemail&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Username: &lt;code&gt;postgres&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Password: &lt;code&gt;postgres&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Port: &lt;code&gt;5432&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Set Up Database Connection&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Make sure your database connection string is in &lt;code&gt;.env&lt;/code&gt; file. And you have ran &lt;code&gt;pnpm nizzy sync&lt;/code&gt; to sync the latest env.&lt;/p&gt;
&lt;p&gt;For local development use:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;DATABASE_URL=&amp;#34;postgresql://postgres:postgres@localhost:5432/zerodotemail&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Database Commands&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Set up database tables&lt;/strong&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pnpm db:push
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Create migration files&lt;/strong&gt; (after schema changes):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pnpm db:generate
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Apply migrations&lt;/strong&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pnpm db:migrate
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;View database content&lt;/strong&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pnpm db:studio
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;If you run &lt;code&gt;pnpm dev&lt;/code&gt; in your terminal, the studio command should be automatically running with the app.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;contribute&#34;&gt;Contribute
&lt;/h2&gt;&lt;p&gt;Please refer to the &lt;a class=&#34;link&#34; href=&#34;.github/CONTRIBUTING.md&#34; &gt;contributing guide&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;d like to help with translating Zero to other languages, check out our &lt;a class=&#34;link&#34; href=&#34;.github/TRANSLATION.md&#34; &gt;translation guide&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;star-history&#34;&gt;Star History
&lt;/h2&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.star-history.com/#Mail-0/Zero&amp;amp;Timeline&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://api.star-history.com/svg?repos=Mail-0/Zero&amp;amp;type=Timeline&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Star History Chart&#34;
	
	
&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;this-project-wouldnt-be-possible-without-these-awesome-companies&#34;&gt;This project wouldn&amp;rsquo;t be possible without these awesome companies
&lt;/h2&gt;&lt;div style=&#34;display: flex; justify-content: center;&#34;&gt;
  &lt;a href=&#34;https://vercel.com&#34; style=&#34;text-decoration: none;&#34;&gt;
    &lt;img src=&#34;public/vercel.png&#34; alt=&#34;Vercel&#34; width=&#34;96&#34;/&gt;
  &lt;/a&gt;
  &lt;a href=&#34;https://better-auth.com&#34; style=&#34;text-decoration: none;&#34;&gt;
    &lt;img src=&#34;public/better-auth.png&#34; alt=&#34;Better Auth&#34; width=&#34;96&#34;/&gt;
  &lt;/a&gt;
  &lt;a href=&#34;https://orm.drizzle.team&#34; style=&#34;text-decoration: none;&#34;&gt;
    &lt;img src=&#34;public/drizzle-orm.png&#34; alt=&#34;Drizzle ORM&#34; width=&#34;96&#34;/&gt;
  &lt;/a&gt;
  &lt;a href=&#34;https://coderabbit.com&#34; style=&#34;text-decoration: none;&#34;&gt;
    &lt;img src=&#34;public/coderabbit.png&#34; alt=&#34;Coderabbit AI&#34; width=&#34;96&#34;/&gt;
  &lt;/a&gt;
&lt;/div&gt;
&lt;h2 id=&#34;-the-team&#34;&gt;🤍 The team
&lt;/h2&gt;&lt;p&gt;Curious who makes Zero? Here are our &lt;a class=&#34;link&#34; href=&#34;https://0.email/contributors&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;contributors and maintainers&lt;/a&gt;&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
