<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Junior Charles</title>
    <description>The latest articles on DEV Community by Junior Charles (@juniorchar2025).</description>
    <link>https://dev.to/juniorchar2025</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3604801%2F80a24185-27df-4a60-95fc-bb35ea04c584.jpg</url>
      <title>DEV Community: Junior Charles</title>
      <link>https://dev.to/juniorchar2025</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/juniorchar2025"/>
    <language>en</language>
    <item>
      <title>I Built an API-First Document Workflow Engine (Looking for Feedback)</title>
      <dc:creator>Junior Charles</dc:creator>
      <pubDate>Tue, 11 Nov 2025 15:07:52 +0000</pubDate>
      <link>https://dev.to/juniorchar2025/i-built-an-api-first-document-workflow-engine-looking-for-feedback-1kdf</link>
      <guid>https://dev.to/juniorchar2025/i-built-an-api-first-document-workflow-engine-looking-for-feedback-1kdf</guid>
      <description>&lt;p&gt;Hey everyone — over the last few months, I’ve been building SignumFlow, an API-first system for uploading documents and running programmatic workflows.&lt;/p&gt;

&lt;p&gt;I built this because most workflow/e-signature platforms are UI-first. They require you to send users to their hosted UI and work inside their UX expectations — which is great for non-technical teams, but restrictive if you want everything embedded directly into your product.&lt;/p&gt;

&lt;p&gt;I wanted something closer to Stripe-style developer ergonomics, but for docs + approval routing.&lt;/p&gt;

&lt;p&gt;So I built SignumFlow.&lt;/p&gt;

&lt;h2&gt;
  
  
  What It Does Today
&lt;/h2&gt;

&lt;p&gt;Right now SignumFlow supports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Uploading documents&lt;/li&gt;
&lt;li&gt;Starting workflows (sequential + parallel routing)&lt;/li&gt;
&lt;li&gt;Retrieving workflow + document state&lt;/li&gt;
&lt;li&gt;Developer portal
→ get API keys, view usage, see quickstarts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No UI is required, just call the API, handle responses, and keep your users inside your app.&lt;/p&gt;

&lt;p&gt;Docs + quickstart:&lt;br&gt;
👉 &lt;a href="https://docs.signumflow.com" rel="noopener noreferrer"&gt;https://docs.signumflow.com&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  What’s Still in Progress
&lt;/h2&gt;

&lt;p&gt;These are actively being built:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Approval actions (minimal endpoint first)&lt;/li&gt;
&lt;li&gt;Webhooks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;My goal is that approvals and lifecycle events can be driven either:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;manually (approve/reject via API), or&lt;/li&gt;
&lt;li&gt;automated rules (coming later)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Webhooks will complement polling so apps can react immediately to workflow transitions.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why I’m Building This
&lt;/h2&gt;

&lt;p&gt;Every product I’ve worked on that needs approvals/docs ends up reinventing the same pieces:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Upload + store documents&lt;/li&gt;
&lt;li&gt;Route them through multiple people&lt;/li&gt;
&lt;li&gt;Track state + timestamps&lt;/li&gt;
&lt;li&gt;Log actions&lt;/li&gt;
&lt;li&gt;Notify systems&lt;/li&gt;
&lt;li&gt;Handle versions&lt;/li&gt;
&lt;li&gt;Generate/PDF-ify&lt;/li&gt;
&lt;li&gt;Keep users from bouncing between two platforms&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Eventually, the internal tool grows into a workflow engine.&lt;/p&gt;

&lt;p&gt;But building + maintaining that layer is painful and especially around lifecycle state, routing, concurrency, and auditing.&lt;/p&gt;

&lt;p&gt;So the idea with SignumFlow is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Let devs own the UI + business logic, and outsource the workflow mechanics to an API.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Basic Example&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Upload a document
curl -X POST https://api.signumflow.com/api/v1/upload \
  -H "Authorization: $API_KEY" \
  -F "file=@contract.pdf"

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Initialize a workflow
curl -X POST https://api.signumflow.com/api/v1/workflow/init \
  -H "Authorization: $API_KEY" \
  -d '{
    "documentId": "doc_123",
    "steps": [
      { "assignee": "alice@example.com" },
      { "assignee": "bob@example.com" }
    ]
  }'

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Check workflow state
curl https://api.signumflow.com/api/v1/workflow/workflow_123 \
  -H "Authorization: $API_KEY"

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Architecture (high-level)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Runtime: Node.js (TypeScript)&lt;/li&gt;
&lt;li&gt;Storage: S3&lt;/li&gt;
&lt;li&gt;DB: PostgreSQL&lt;/li&gt;
&lt;li&gt;API: REST (JSON)&lt;/li&gt;
&lt;li&gt;Workflow Engine: stateless + async routing&lt;/li&gt;
&lt;li&gt;Auth: API key per apps - &lt;/li&gt;
&lt;li&gt;Deployment: AWS Lambda + API Gateway (Serverless)&lt;/li&gt;
&lt;li&gt;Pattern: REST + polling today; webhooks soon&lt;/li&gt;
&lt;li&gt;Developer Portal: app + key management&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Workflows are modeled as step graphs (seq/parallel).&lt;br&gt;
State transitions are recorded + queryable.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqd5jumh8il2b57evphdk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqd5jumh8il2b57evphdk.png" alt=" " width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Who Might Use This?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;SaaS products that need embedded approvals&lt;/li&gt;
&lt;li&gt;Internal tooling teams&lt;/li&gt;
&lt;li&gt;Platforms needing customer workflows&lt;/li&gt;
&lt;li&gt;Construction, insurance, real estate, healthcare, legal&lt;/li&gt;
&lt;li&gt;Anything requiring document routing through multiple hands&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is not meant to replace full UI-heavy signature platforms.&lt;br&gt;
It’s for developers who want control and flexibility.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I’m Looking For
&lt;/h2&gt;

&lt;p&gt;If you try the API or skim the docs, I’d love feedback on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What’s confusing / unclear?&lt;/li&gt;
&lt;li&gt;Missing must-have API surface?&lt;/li&gt;
&lt;li&gt;Naming improvements?&lt;/li&gt;
&lt;li&gt;A feature you expect but don’t see?&lt;/li&gt;
&lt;li&gt;Does the value proposition make sense?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Even one small insight would be super helpful this early.&lt;/p&gt;

&lt;p&gt;Docs:&lt;br&gt;
👉 &lt;a href="https://docs.signumflow.com" rel="noopener noreferrer"&gt;https://docs.signumflow.com&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Roadmap (Short term)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Approval endpoints&lt;/li&gt;
&lt;li&gt;Webhooks&lt;/li&gt;
&lt;li&gt;Templates&lt;/li&gt;
&lt;li&gt;Admin UI (optional)&lt;/li&gt;
&lt;li&gt;SDKs (TS + Python)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you’ve built workflow engines, approval systems, or signature integrations before, your feedback would mean a lot.&lt;/p&gt;

&lt;p&gt;Thanks for reading!&lt;br&gt;
Happy to answer any questions.&lt;/p&gt;

&lt;p&gt;—&lt;br&gt;
Junior&lt;br&gt;
Founder, SignumFlow&lt;/p&gt;

</description>
      <category>api</category>
      <category>webdev</category>
      <category>saas</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
