Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
d4fac5c
feat: Implement initial user authentication with a sign-in form, dash…
M-Subhan-Ali Mar 3, 2026
3c01678
feat: Implement initial authentication flows including sign-in, sign-…
M-Subhan-Ali Mar 3, 2026
3c5df2c
feat: Introduce email templates for authentication and notifications,…
M-Subhan-Ali Mar 4, 2026
e50db4d
feat: Implement authentication email templates and user settings for …
M-Subhan-Ali Mar 4, 2026
4e5edf9
feat: Implement email sending with templates and fallback, add sign-u…
M-Subhan-Ali Mar 4, 2026
30d7257
feat/update ci.yml
M-Subhan-Ali Mar 4, 2026
681da23
feat: Implement email verification and authentication flows, and upda…
M-Subhan-Ali Mar 4, 2026
f516d52
feat: fix dependencies issues and now project have zero vulnerabilities
M-Subhan-Ali Mar 5, 2026
ab90521
feat: Implement email-based authentication flows including verificati…
M-Subhan-Ali Mar 6, 2026
a5cb568
feat: fix github advance security issues.
M-Subhan-Ali Mar 6, 2026
c2a5bef
feat(ui): add shadcn components for dashboard and settings UI
hasnaintypes Mar 7, 2026
92c1dc6
feat: add new icons for Google Calendar, Gmail, MS Outlook, Slack, an…
hasnaintypes Mar 7, 2026
9129c0f
feat: add CommandMenu, Logo, NotificationCenter, and UserMenu compone…
hasnaintypes Mar 7, 2026
a07dac3
feat: implement user preferences management with mutations and querie…
hasnaintypes Mar 7, 2026
d4dfbf5
feat: add ChangeEmailDialog, DeleteAccountDialog, and TwoFactorSetupD…
hasnaintypes Mar 7, 2026
67bf3c6
feat: implement AppHeader, AppSidebar, and Navbar components; enhance…
hasnaintypes Mar 7, 2026
a2356b9
feat: update authentication pages to use Logo component and improve u…
hasnaintypes Mar 7, 2026
49d5945
feat: add IntegrationSection, NotificationSection, ProfileSection, an…
hasnaintypes Mar 7, 2026
5073a3e
feat: refactor UI components for improved styling and functionality; …
hasnaintypes Mar 7, 2026
c27857a
feat: implement user profile image upload and settings management; en…
hasnaintypes Mar 7, 2026
fb34179
refactor: update layout and styling for improved UI consistency
hasnaintypes Mar 7, 2026
27e7143
Merge pull request #7 from hasnaintypes/feat/subhan-fixes-issue1
hasnaintypes Mar 7, 2026
95ed734
Merge branch 'develop' of https://github.com/hasnaintypes/ai-email-ge…
hasnaintypes Mar 7, 2026
029ff26
refactor: improve error handling and user feedback in authentication …
hasnaintypes Mar 7, 2026
5ab61fd
feat: add logger utility for backend and frontend; enhance email serv…
hasnaintypes Mar 7, 2026
331cd4e
chore: update environment variable documentation and improve contribu…
hasnaintypes Mar 7, 2026
11ee7a4
feat: update email templates for improved clarity and design; enhance…
hasnaintypes Mar 7, 2026
67520a2
feat(docs): add new documentation layout and styles
hasnaintypes Mar 7, 2026
6a50009
refactor: standardize code formatting and improve consistency across …
hasnaintypes Mar 7, 2026
d50301f
feat: add settings configuration, refactor auth and integration compo…
hasnaintypes Mar 7, 2026
dd8bcd2
refactor: adjust indentation for improved code readability in dashboa…
hasnaintypes Mar 7, 2026
154b930
Merge pull request #8 from hasnaintypes/feature/dashboard-settings
hasnaintypes Mar 7, 2026
24f1fa3
Merge branch 'main' into develop
hasnaintypes Mar 11, 2026
3d5e5d0
chore: update dependencies to latest versions in package.json and pnp…
hasnaintypes Mar 11, 2026
2abd480
Merge branch 'develop' of https://github.com/hasnaintypes/ai-email-ge…
hasnaintypes Mar 11, 2026
a55a87c
fix: update hono version to ^4.12.7 in package.json and pnpm-lock.yaml
hasnaintypes Mar 12, 2026
56fb558
fix: add GITHUB_TOKEN to CI workflow for authenticated action downloads
hasnaintypes Mar 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 62 additions & 11 deletions .env.example
Original file line number Diff line number Diff line change
@@ -1,19 +1,70 @@
### Variables generated for cloud via npx convex dev
# ============================================================
# Sendable - Environment Variables
# ============================================================
# Copy this file to .env.local and fill in the values.
# Variables prefixed with NEXT_PUBLIC_ are exposed to the browser.
# All other variables are server-side only.
# ============================================================

# ── Convex ──────────────────────────────────────────────────
# Generated by `npx convex dev` — replace with your deployment values
CONVEX_DEPLOYMENT=dev:adjective-animal-123
NEXT_PUBLIC_CONVEX_URL=https://adjective-animal-123.convex.cloud
NEXT_PUBLIC_CONVEX_SITE_URL=https://adjective-animal-123.convex.site

# ── Site URL ────────────────────────────────────────────────
# Must match your deployment URL (used for auth origins, email links, CORS)
SITE_URL=http://localhost:3000
NEXT_PUBLIC_SITE_URL=http://localhost:3000

### Variables to be manually set for both cloud and self hosted
NEXT_PUBLIC_SITE_URL=https://localhost:3000
SITE_URL=https://localhost:3000
# ── Auth (Better Auth) ─────────────────────────────────────
# Generate a random secret: `openssl rand -base64 32`
BETTER_AUTH_SECRET=your-random-secret-here

# ── Email Provider ──────────────────────────────────────────
# Which provider to use: "resend" (default) or "smtp"
# Set to "smtp" for local development with Mailpit/Mailtrap
EMAIL_PROVIDER=resend

### Variables to be manually set for cloud only
NEXT_PUBLIC_CONVEX_SITE_URL=https://adjective-animal-123.convex.site
# ── Resend (production email) ──────────────────────────────
# Get your API key at https://resend.com/api-keys
RESEND_API_KEY=re_xxxxxxxxxxxx

# Optional: restrict Resend to only send to this email (useful for free tier)
# RESEND_VERIFIED_RECIPIENT=your-verified@email.com

# ── SMTP (development / fallback email) ────────────────────
# For local dev, use Mailpit (localhost:1025) or Mailtrap
# SMTP_HOST=localhost
# SMTP_PORT=1025
# SMTP_USER=
# SMTP_PASS=
# SMTP_SECURE=false
# SMTP_FROM_NAME=Sendable
# SMTP_FROM_EMAIL=noreply@sendable.dev

# ── OAuth Providers (optional) ─────────────────────────────
# Uncomment and configure when ready to enable social auth

# GitHub OAuth: https://github.com/settings/developers
# GITHUB_CLIENT_ID=
# GITHUB_CLIENT_SECRET=

# Google OAuth: https://console.cloud.google.com/apis/credentials
# GOOGLE_CLIENT_ID=
# GOOGLE_CLIENT_SECRET=

# Slack OAuth: https://api.slack.com/apps
# SLACK_CLIENT_ID=
# SLACK_CLIENT_SECRET=

# ── Logging (BetterStack / Logtail) ────────────────────────
# Get your source token at https://logs.betterstack.com/source-tokens
# When set, production logs are forwarded to BetterStack.
# When not set, logs only go to console (ideal for local dev).
# LOGTAIL_SOURCE_TOKEN=

### Variables to be manually set for self hosted only
# CONVEX_SELF_HOSTED_URL='http://127.0.0.1:3210'
# CONVEX_SELF_HOSTED_ADMIN_KEY='<replace-with-admin-key>'
# NEXT_PUBLIC_CONVEX_URL='http://127.0.0.1:3210'
# NEXT_PUBLIC_CONVEX_SITE_URL='http://127.0.0.1:3211'
# ── Convex Self-Hosted (optional) ──────────────────────────
# Only needed if running Convex locally instead of cloud
# CONVEX_SELF_HOSTED_URL=http://127.0.0.1:3210
# CONVEX_SELF_HOSTED_ADMIN_KEY=<replace-with-admin-key>
68 changes: 45 additions & 23 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,78 +10,100 @@ jobs:
lint-and-typecheck:
name: Lint & Type Check
runs-on: ubuntu-latest


env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Setup Node.js
# Setup pnpm (uses version from package.json automatically)
- name: Setup pnpm
uses: pnpm/action-setup@v4

# Setup Node.js
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
node-version: 20
cache: pnpm

# Install dependencies
- name: Install dependencies
run: npm ci
run: pnpm install --frozen-lockfile

- name: Run ESLint
run: npm run lint
run: pnpm lint
continue-on-error: true

- name: Type check frontend
run: npx tsc --noEmit
run: pnpm exec tsc --noEmit

- name: Type check Convex backend
run: npx tsc -p convex --noEmit
run: pnpm exec tsc -p convex --noEmit


build:
name: Build Application
runs-on: ubuntu-latest
needs: lint-and-typecheck


env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Setup Node.js
- name: Setup pnpm
uses: pnpm/action-setup@v4

- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
node-version: 20
cache: pnpm

- name: Install dependencies
run: npm ci
run: pnpm install --frozen-lockfile

- name: Set up Convex
env:
CONVEX_DEPLOY_KEY: ${{ secrets.CONVEX_DEPLOY_KEY }}
CONVEX_DEPLOYMENT: ${{ secrets.CONVEX_DEPLOYMENT }}
run: |
npx convex dev --once --configure=new
run: pnpm exec convex dev --once --configure=new

- name: Build Next.js
env:
CONVEX_DEPLOY_KEY: ${{ secrets.CONVEX_DEPLOY_KEY }}
CONVEX_DEPLOYMENT: ${{ secrets.CONVEX_DEPLOYMENT }}
run: npm run build
run: pnpm build


check-formatting:
name: Check Formatting
runs-on: ubuntu-latest


env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Setup Node.js
- name: Setup pnpm
uses: pnpm/action-setup@v4

- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
node-version: 20
cache: pnpm

- name: Install dependencies
run: npm ci
run: pnpm install --frozen-lockfile

- name: Check Prettier formatting
run: npx prettier --check "src/**/*.{ts,tsx,js,jsx,json,css,md}" "convex/**/*.{ts,js}"
continue-on-error: true
run: pnpm exec prettier --check "src/**/*.{ts,tsx,js,jsx,json,css,md}" "convex/**/*.{ts,js}"
continue-on-error: true
4 changes: 2 additions & 2 deletions .github/workflows/welcome.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ jobs:
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
issue-message: |
**Welcome to Sendable.ai!**
**Welcome to Sendable!**

Thank you for opening your first issue!

Expand All @@ -41,7 +41,7 @@ jobs:
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
pr-message: |
**Welcome to Sendable.ai!**
**Welcome to Sendable!**

Thank you for opening your first pull request!

Expand Down
6 changes: 3 additions & 3 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Contributing to Sendable.ai
# Contributing to Sendable

First off, thank you for considering contributing to Sendable.ai! 🎉
First off, thank you for considering contributing to Sendable! 🎉

The following is a set of guidelines for contributing to this project. These are mostly guidelines, not rules. Use your best judgment, and feel free to propose changes to this document in a pull request.

Expand Down Expand Up @@ -548,7 +548,7 @@ If you have questions:

## Thank You!

Your contributions make Sendable.ai better for everyone. We appreciate your time and effort!
Your contributions make Sendable better for everyone. We appreciate your time and effort!

---

Expand Down
Loading
Loading