Andy GrunwaldandClaude Opus 4.7 523bcad602 Coerce custom CSV column values to boolean during import
Custom CSV columns with values like "true"/"false" were stored as
strings, which made `ContactService.getAvailableFields()` report them
as string fields and lost the boolean toggle in the dashboard's
segment-filter UI. Only the reserved `subscribed` column was coerced.

Mirror the truthy keyword set already used for `subscribed`
(`true`/`1`/`yes`) and add its symmetric falsy counterpart
(`false`/`0`/`no`) for custom columns. Values outside that keyword set
are returned unchanged so names, IDs, or arbitrary strings are not
corrupted into `false`. Coercion runs over `Object.entries(customData)`
right before the `upsert()` call; no other code path needs to change
because `ContactService.upsert()` already accepts
`Record<string, unknown>` and `mergeContactData()` accepts mixed JSON
primitives. Post-import inference via `jsonb_typeof()` then classifies
the stored JSON boolean as type `boolean` automatically.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 10:16:33 +02:00
2025-12-01 10:00:25 +01:00
2025-12-01 10:00:25 +01:00
2025-12-01 10:00:25 +01:00
2026-05-13 17:23:20 +00:00
2024-08-01 14:45:00 +02:00
2026-05-13 17:23:20 +00:00

card.png

Plunk

The Open-Source Email Platform

Contributors Build Status License Stars Issues Forks Docker Sponsor Documentation Discord

Introduction

Transactional emails, marketing campaigns, and workflow automation — in one platform. Self-hostable, $0.001 per email, no contact limits.

An open-source, self-hosted alternative to tools SendGrid, Resend or Mailgun.

Features

  • Transactional Emails: Send emails straight from your API with template support and variable substitution
  • SMTP: Use Plunk as an SMTP relay to send emails from any existing tool or framework
  • Campaigns: Send newsletters and product updates to large audiences
  • Workflows: Create advanced automations with triggers, delays, and conditional logic
  • Segments: Organize contacts with dynamic filtering and target the right audience
  • Contact Management: Manage contacts with custom fields and full activity history
  • Analytics: Track opens, clicks, bounces, and engagement metrics in real-time
  • Custom Domains: Verify and send from your own domains with DKIM/SPF support
  • Inbound Emails: Receive and process incoming emails with custom routing rules

Sponsors

Plunk is made possible by the support of our sponsors. If you self-host Plunk, consider supporting via GitHub Sponsors.

Self-hosting Plunk

The easiest way to self-host Plunk is by using the plunk Docker image. You can pull the latest image from Github.

A complete guide on how to deploy Plunk can be found in the documentation.

Community

Contributing

You are welcome to contribute to Plunk. You can find a guide on how to contribute in CONTRIBUTING.md.

Contributors

License

AGPL-3.0 License - see LICENSE for details.

S
Description
Plunk configured for Portainer
Readme AGPL-3.0
8.6 MiB
Languages
TypeScript 94.1%
MDX 4.7%
Shell 0.4%
Dockerfile 0.4%
CSS 0.2%
Other 0.2%