No description
  • TypeScript 98.6%
  • CSS 0.9%
  • Shell 0.2%
  • Dockerfile 0.2%
  • JavaScript 0.1%
Find a file
2026-10-26 09:14:14 -04:00
backend chore: release v0.15.0 (changelog, README, versions) 2026-10-26 09:12:54 -04:00
frontend chore: release v0.15.0 (changelog, README, versions) 2026-10-26 09:12:54 -04:00
.gitignore Postak Phase 1: auth, projects, contacts, CSV import, Docker setup; verified end-to-end 2026-10-14 20:57:45 -04:00
CHANGELOG.md chore: release v0.15.0 (changelog, README, versions) 2026-10-26 09:12:54 -04:00
CONTRIBUTING.md Prepare v0.11.0: version bump, changelog, README, migration how-to 2026-10-15 08:41:19 -04:00
docker-compose.yml Sign-up forms: hosted page and embed, validated settings, opt-in and welcome emails, spam protection 2026-10-15 09:20:28 -04:00
LICENSE Postak Phase 1: auth, projects, contacts, CSV import, Docker setup; verified end-to-end 2026-10-14 20:57:45 -04:00
README.md chore: release v0.15.0 (changelog, README, versions) 2026-10-26 09:12:54 -04:00

Postak

Postak is a self-hosted newsletter and email-marketing platform by vmanne.com. It lets you manage subscriber lists, design and send newsletter campaigns, collect sign-ups through embeddable forms, and track engagement — all on your own infrastructure.

Postak is an original, independently developed product. It is not derived from any third-party codebase.

Features (v0.15.0)

  • Authentication — login, password change, forgot-password by email, optional self-registration, root admin bootstrap
  • Users — the administrator creates, disables, and deletes accounts and can set temporary passwords
  • Projects — separate workspaces with owner/member roles, an overview page, and settings; only members can see a project's data
  • Contacts — search, contact pages with activity, groups, and matching segments, custom fields and external IDs, bulk selection, CSV import and export
  • Groups — hand-managed contact lists per project; add or remove contacts one by one, in bulk, by CSV import, or from sign-up forms
  • Segments — rule builder with AND/OR blocks (email, names, dates, custom fields, group membership), live contact list, CSV download
  • Sign-up forms — hosted pages and embed code, form editor with live preview, double opt-in and welcome emails, spam protection
  • Campaigns — editor with live preview, Plain text/Markdown/HTML/MJML, personalisation and campaign data, test sends, duplicate, send to several groups and segments (with exclusions and a live count), send now or schedule
  • A/B testing — up to four subject, preview text, or content variants sent to a test group; the winner by opens or clicks (or picked by hand) goes to everyone else
  • Templates — styled, HTML, plain-text, or MJML templates with style options, footer, live preview, clone, and a project default
  • Delivery — SMTP (including on-prem relays), Amazon SES (SMTP or API), SendGrid, Mailgun, and Postmark, background sending with per-sender rate limits and retries
  • API keys — project-scoped keys for scripts and other systems, shown once, stored hashed, rate limited, and revocable
  • Tracking — opens, clicks, and unsubscribes per recipient (can be turned off per campaign); SES bounces and complaints via SNS; optional public web view
  • Reporting — per-campaign link clicks, recipients with CSV export, activity over time, and a 14-day project trend
  • Upgrades — versioned database migrations, applied on start
  • Administration — system info page showing how the server is configured

Planned work and known gaps are tracked as milestones and issues.

Tech Stack

Layer Technology
Backend Node.js + TypeScript (NestJS)
Database PostgreSQL (Prisma ORM)
Frontend React + TypeScript (Vite)
Email AWS SES / SMTP (Nodemailer)
Deployment Docker + Docker Compose

Quick Start

docker compose up -d

The app is served at http://localhost:3000 and the API at http://localhost:3001.

Run the test suites. The backend run (unit, migrations, end-to-end) resets a separate postak_test database, never the app's postak database. Create it once:

docker exec postak-db createdb -U postak postak_test
docker compose run --rm --build -T backend-test
docker compose run --rm --build -T frontend-test

Upgrading from v0.8.0 or earlier: back up the database first. On first start the backend adopts the existing schema into the migration history.

Project Structure

Postak/
├── backend/          # NestJS API + Prisma
├── frontend/         # React app
├── docker-compose.yml
└── README.md

Documentation

Owner documentation (architecture, data model, API reference, operations) is maintained separately by the project owners and is not part of this repository.

License

Copyright © vmanne.com. All rights reserved. Proprietary and confidential.