Compare commits
2 Commits
main
...
EC-00-Acti
| Author | SHA1 | Date | |
|---|---|---|---|
|
4aca6997ff
|
|||
| 08bb82b7ae |
46
.gitea/issue_template/bug_report.md
Normal file
46
.gitea/issue_template/bug_report.md
Normal file
@@ -0,0 +1,46 @@
|
||||
---
|
||||
name: 🐛 Bug Report
|
||||
about: Report a bug or unexpected behavior
|
||||
title: '[BUG] '
|
||||
labels: bug, status:investigating
|
||||
assignees: ''
|
||||
---
|
||||
|
||||
## Bug Description
|
||||
<!-- A clear description of what the bug is -->
|
||||
|
||||
## Steps to Reproduce
|
||||
1.
|
||||
2.
|
||||
3.
|
||||
|
||||
## Expected Behavior
|
||||
<!-- What you expected to happen -->
|
||||
|
||||
## Actual Behavior
|
||||
<!-- What actually happened -->
|
||||
|
||||
## Environment
|
||||
- **Subscription Tier**: Sandbox / Indie / Studio / Enterprise
|
||||
- **Endpoint Used**: (e.g., POST /api/v1/webhooks/stripe/...)
|
||||
- **Timestamp**: (e.g., 2026-02-13T10:30:00Z)
|
||||
- **Event ID** (if applicable): evt_...
|
||||
- **Browser** (if dashboard issue): Chrome / Firefox / Safari / Edge
|
||||
|
||||
## Screenshots / Logs
|
||||
<!-- If applicable, add screenshots or error logs -->
|
||||
```
|
||||
Paste logs here
|
||||
```
|
||||
|
||||
## Additional Context
|
||||
<!-- Any other context about the problem -->
|
||||
|
||||
## Workaround
|
||||
<!-- If you found a temporary workaround, share it here -->
|
||||
|
||||
---
|
||||
|
||||
**⚠️ SECURITY WARNING**
|
||||
Do NOT include API keys, secrets, or sensitive customer data.
|
||||
For security issues, email security@evercatch.dev instead.
|
||||
@@ -1,112 +0,0 @@
|
||||
name: 🐛 Bug Report
|
||||
about: Report a bug or unexpected behavior
|
||||
title: '[BUG] '
|
||||
labels: ['bug', 'status:investigating']
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
> **⚠️ SECURITY WARNING:** Do NOT include API keys, secrets, or sensitive customer data.
|
||||
> For security issues, email **security@evercatch.dev** instead.
|
||||
|
||||
- type: textarea
|
||||
id: description
|
||||
attributes:
|
||||
label: Bug Description
|
||||
description: A clear description of what the bug is.
|
||||
placeholder: Describe the bug...
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: steps
|
||||
attributes:
|
||||
label: Steps to Reproduce
|
||||
description: Step-by-step instructions to reproduce the behavior.
|
||||
placeholder: |
|
||||
1.
|
||||
2.
|
||||
3.
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: expected
|
||||
attributes:
|
||||
label: Expected Behavior
|
||||
description: What you expected to happen.
|
||||
placeholder: I expected...
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: actual
|
||||
attributes:
|
||||
label: Actual Behavior
|
||||
description: What actually happened.
|
||||
placeholder: Instead, what happened was...
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: dropdown
|
||||
id: tier
|
||||
attributes:
|
||||
label: Subscription Tier
|
||||
options:
|
||||
- Sandbox (Free)
|
||||
- Indie
|
||||
- Studio
|
||||
- Enterprise
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: input
|
||||
id: endpoint
|
||||
attributes:
|
||||
label: Endpoint Used
|
||||
description: The API endpoint related to this bug.
|
||||
placeholder: 'e.g. POST /api/v1/webhooks/stripe/...'
|
||||
|
||||
- type: input
|
||||
id: timestamp
|
||||
attributes:
|
||||
label: Timestamp
|
||||
description: When did this occur?
|
||||
placeholder: 'e.g. 2026-02-13T10:30:00Z'
|
||||
|
||||
- type: input
|
||||
id: event-id
|
||||
attributes:
|
||||
label: Event ID (if applicable)
|
||||
placeholder: 'e.g. evt_...'
|
||||
|
||||
- type: dropdown
|
||||
id: browser
|
||||
attributes:
|
||||
label: Browser (if dashboard issue)
|
||||
options:
|
||||
- N/A
|
||||
- Chrome
|
||||
- Firefox
|
||||
- Safari
|
||||
- Edge
|
||||
- Other
|
||||
|
||||
- type: textarea
|
||||
id: logs
|
||||
attributes:
|
||||
label: Screenshots / Logs
|
||||
description: If applicable, paste error logs or describe screenshots.
|
||||
render: shell
|
||||
|
||||
- type: textarea
|
||||
id: workaround
|
||||
attributes:
|
||||
label: Workaround
|
||||
description: If you found a temporary workaround, share it here.
|
||||
|
||||
- type: textarea
|
||||
id: context
|
||||
attributes:
|
||||
label: Additional Context
|
||||
description: Any other context about the problem.
|
||||
45
.gitea/issue_template/documentation.md
Normal file
45
.gitea/issue_template/documentation.md
Normal file
@@ -0,0 +1,45 @@
|
||||
---
|
||||
name: 📚 Documentation Issue
|
||||
about: Report missing, incorrect, or unclear documentation
|
||||
title: '[DOCS] '
|
||||
labels: documentation
|
||||
assignees: ''
|
||||
---
|
||||
|
||||
## Documentation Page
|
||||
<!-- Link to the docs page with the issue -->
|
||||
https://docs.evercatch.dev/...
|
||||
|
||||
## Issue Type
|
||||
- [ ] Missing documentation
|
||||
- [ ] Incorrect information
|
||||
- [ ] Unclear/confusing explanation
|
||||
- [ ] Broken link
|
||||
- [ ] Code example doesn't work
|
||||
- [ ] Typo/grammar
|
||||
- [ ] Outdated information
|
||||
|
||||
## Description
|
||||
<!-- What's wrong with the docs? -->
|
||||
|
||||
## Current Content
|
||||
<!-- Quote the current problematic content -->
|
||||
```
|
||||
Current text/code here
|
||||
```
|
||||
|
||||
## Suggested Fix
|
||||
<!-- How would you improve it? -->
|
||||
```
|
||||
Suggested text/code here
|
||||
```
|
||||
|
||||
## Additional Context
|
||||
<!-- Screenshots, correct information, working examples, etc. -->
|
||||
|
||||
## Impact
|
||||
<!-- How does this affect users? -->
|
||||
- [ ] Critical - Causes errors if followed
|
||||
- [ ] High - Likely to confuse users
|
||||
- [ ] Medium - Could be clearer
|
||||
- [ ] Low - Minor improvement
|
||||
@@ -1,68 +0,0 @@
|
||||
name: 📚 Documentation Issue
|
||||
about: Report missing, incorrect, or unclear documentation
|
||||
title: '[DOCS] '
|
||||
labels: ['documentation']
|
||||
body:
|
||||
- type: input
|
||||
id: page-url
|
||||
attributes:
|
||||
label: Documentation Page
|
||||
description: Link to the docs page with the issue.
|
||||
placeholder: 'https://docs.evercatch.dev/...'
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: checkboxes
|
||||
id: issue-type
|
||||
attributes:
|
||||
label: Issue Type
|
||||
options:
|
||||
- label: Missing documentation
|
||||
- label: Incorrect information
|
||||
- label: Unclear/confusing explanation
|
||||
- label: Broken link
|
||||
- label: Code example doesn't work
|
||||
- label: Typo/grammar
|
||||
- label: Outdated information
|
||||
|
||||
- type: textarea
|
||||
id: description
|
||||
attributes:
|
||||
label: Description
|
||||
description: What's wrong with the docs?
|
||||
placeholder: The problem is...
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: current
|
||||
attributes:
|
||||
label: Current Content
|
||||
description: Quote the current problematic content.
|
||||
render: markdown
|
||||
|
||||
- type: textarea
|
||||
id: suggested
|
||||
attributes:
|
||||
label: Suggested Fix
|
||||
description: How would you improve it?
|
||||
render: markdown
|
||||
|
||||
- type: textarea
|
||||
id: context
|
||||
attributes:
|
||||
label: Additional Context
|
||||
description: Screenshots, correct information, working examples, etc.
|
||||
|
||||
- type: dropdown
|
||||
id: impact
|
||||
attributes:
|
||||
label: Impact
|
||||
description: How does this affect users?
|
||||
options:
|
||||
- Critical - Causes errors if followed
|
||||
- High - Likely to confuse users
|
||||
- Medium - Could be clearer
|
||||
- Low - Minor improvement
|
||||
validations:
|
||||
required: true
|
||||
54
.gitea/issue_template/feature_request.md
Normal file
54
.gitea/issue_template/feature_request.md
Normal file
@@ -0,0 +1,54 @@
|
||||
---
|
||||
name: ✨ Feature Request
|
||||
about: Suggest a new feature or enhancement
|
||||
title: '[FEATURE] '
|
||||
labels: feature
|
||||
assignees: ''
|
||||
---
|
||||
|
||||
## Problem Statement
|
||||
<!-- What problem does this feature solve? -->
|
||||
|
||||
## Proposed Solution
|
||||
<!-- Describe your ideal solution -->
|
||||
|
||||
## Use Case
|
||||
<!-- How would you use this feature? Be specific. -->
|
||||
|
||||
**Example scenario:**
|
||||
```
|
||||
When I... [describe situation]
|
||||
I want to... [describe action]
|
||||
So that... [describe benefit]
|
||||
```
|
||||
|
||||
## Current Workaround
|
||||
<!-- How are you currently handling this? -->
|
||||
|
||||
## Tier Relevance
|
||||
<!-- Which subscription tier would benefit most? -->
|
||||
- [ ] Sandbox (Free)
|
||||
- [ ] Indie
|
||||
- [ ] Studio
|
||||
- [ ] Enterprise
|
||||
- [ ] All tiers
|
||||
|
||||
## Similar Features
|
||||
<!-- Have you seen this feature in other products? -->
|
||||
|
||||
## Additional Context
|
||||
<!-- Screenshots, mockups, examples from competitors, etc. -->
|
||||
|
||||
## Impact
|
||||
<!-- How important is this feature to you? -->
|
||||
- [ ] Critical - Blocking my business
|
||||
- [ ] High - Very useful
|
||||
- [ ] Medium - Nice to have
|
||||
- [ ] Low - Just an idea
|
||||
|
||||
## Willingness to Pay
|
||||
<!-- Would you upgrade your tier for this feature? -->
|
||||
- [ ] Yes, I would upgrade immediately
|
||||
- [ ] Yes, I would consider upgrading
|
||||
- [ ] No, but it would improve my experience
|
||||
- [ ] N/A - Already on Enterprise
|
||||
@@ -1,90 +0,0 @@
|
||||
name: ✨ Feature Request
|
||||
about: Suggest a new feature or enhancement
|
||||
title: '[FEATURE] '
|
||||
labels: ['feature']
|
||||
body:
|
||||
- type: textarea
|
||||
id: problem
|
||||
attributes:
|
||||
label: Problem Statement
|
||||
description: What problem does this feature solve?
|
||||
placeholder: I'm frustrated when...
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: solution
|
||||
attributes:
|
||||
label: Proposed Solution
|
||||
description: Describe your ideal solution.
|
||||
placeholder: I would like...
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: use-case
|
||||
attributes:
|
||||
label: Use Case
|
||||
description: How would you use this feature? Be specific.
|
||||
placeholder: |
|
||||
When I... [describe situation]
|
||||
I want to... [describe action]
|
||||
So that... [describe benefit]
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: workaround
|
||||
attributes:
|
||||
label: Current Workaround
|
||||
description: How are you currently handling this?
|
||||
|
||||
- type: checkboxes
|
||||
id: tier
|
||||
attributes:
|
||||
label: Tier Relevance
|
||||
description: Which subscription tier(s) would benefit most?
|
||||
options:
|
||||
- label: Sandbox (Free)
|
||||
- label: Indie
|
||||
- label: Studio
|
||||
- label: Enterprise
|
||||
- label: All tiers
|
||||
|
||||
- type: textarea
|
||||
id: similar
|
||||
attributes:
|
||||
label: Similar Features
|
||||
description: Have you seen this feature in other products?
|
||||
|
||||
- type: textarea
|
||||
id: context
|
||||
attributes:
|
||||
label: Additional Context
|
||||
description: Screenshots, mockups, examples from competitors, etc.
|
||||
|
||||
- type: dropdown
|
||||
id: impact
|
||||
attributes:
|
||||
label: Impact
|
||||
description: How important is this feature to you?
|
||||
options:
|
||||
- Critical - Blocking my business
|
||||
- High - Very useful
|
||||
- Medium - Nice to have
|
||||
- Low - Just an idea
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: dropdown
|
||||
id: willingness
|
||||
attributes:
|
||||
label: Willingness to Pay
|
||||
description: Would you upgrade your tier for this feature?
|
||||
options:
|
||||
- 'Yes, I would upgrade immediately'
|
||||
- 'Yes, I would consider upgrading'
|
||||
- No, but it would improve my experience
|
||||
- N/A - Already on Enterprise
|
||||
validations:
|
||||
required: true
|
||||
44
.gitea/issue_template/security_vulnerability.md
Normal file
44
.gitea/issue_template/security_vulnerability.md
Normal file
@@ -0,0 +1,44 @@
|
||||
---
|
||||
name: 🔐 Security Vulnerability
|
||||
about: Report a security issue (PRIVATE - use email instead)
|
||||
title: 'DO NOT USE - Email security@evercatch.dev'
|
||||
labels: security
|
||||
assignees: ''
|
||||
---
|
||||
|
||||
# ⚠️ STOP - DO NOT USE THIS TEMPLATE
|
||||
|
||||
**Security vulnerabilities should NOT be reported publicly.**
|
||||
|
||||
Please email us instead: **security@evercatch.dev**
|
||||
|
||||
## Why?
|
||||
|
||||
Public disclosure of security issues can:
|
||||
- Put user data at risk
|
||||
- Allow attackers to exploit the vulnerability
|
||||
- Violate responsible disclosure practices
|
||||
|
||||
## What to Include in Your Email
|
||||
|
||||
- **Description** - What is the vulnerability?
|
||||
- **Steps to Reproduce** - How can we reproduce it?
|
||||
- **Impact** - What could an attacker do?
|
||||
- **Proof of Concept** - Code or screenshots (optional)
|
||||
- **Suggested Fix** - If you have one
|
||||
- **Your Contact Info** - For follow-up
|
||||
|
||||
## Our Commitment
|
||||
|
||||
- ✅ Response within 24 hours
|
||||
- ✅ Updates every 48 hours
|
||||
- ✅ Credit in security advisories (if desired)
|
||||
- ✅ Potential bug bounty (for critical issues)
|
||||
|
||||
## Security Policy
|
||||
|
||||
Read our full security policy: [SECURITY.md](../../SECURITY.md)
|
||||
|
||||
---
|
||||
|
||||
**Thank you for keeping Evercatch secure!** 🔒
|
||||
@@ -1,56 +0,0 @@
|
||||
name: 🔐 Security Vulnerability
|
||||
about: Report a security issue (PRIVATE - use email instead)
|
||||
title: 'DO NOT USE - Email security@evercatch.dev'
|
||||
labels: ['security']
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
# ⚠️ STOP — DO NOT USE THIS TEMPLATE
|
||||
|
||||
**Security vulnerabilities should NOT be reported publicly.**
|
||||
|
||||
Please email us instead: **security@evercatch.dev**
|
||||
|
||||
---
|
||||
|
||||
### Why?
|
||||
|
||||
Public disclosure of security issues can:
|
||||
- Put user data at risk
|
||||
- Allow attackers to exploit the vulnerability before a fix is ready
|
||||
- Violate responsible disclosure practices
|
||||
|
||||
---
|
||||
|
||||
### What to Include in Your Email
|
||||
|
||||
- **Description** — What is the vulnerability?
|
||||
- **Steps to Reproduce** — How can we reproduce it?
|
||||
- **Impact** — What could an attacker do?
|
||||
- **Proof of Concept** — Code or screenshots (optional)
|
||||
- **Suggested Fix** — If you have one
|
||||
- **Your Contact Info** — For follow-up
|
||||
|
||||
---
|
||||
|
||||
### Our Commitment
|
||||
|
||||
- ✅ Response within 24 hours
|
||||
- ✅ Updates every 48 hours
|
||||
- ✅ Credit in security advisories (if desired)
|
||||
- ✅ Potential bug bounty for critical issues
|
||||
|
||||
Read our full security policy: [SECURITY.md](../../SECURITY.md)
|
||||
|
||||
---
|
||||
|
||||
**Thank you for keeping Evercatch secure! 🔒**
|
||||
|
||||
- type: checkboxes
|
||||
id: acknowledge
|
||||
attributes:
|
||||
label: Acknowledgement
|
||||
options:
|
||||
- label: I understand I should email security@evercatch.dev instead of using this form.
|
||||
required: true
|
||||
52
.gitea/issue_template/support_request.md
Normal file
52
.gitea/issue_template/support_request.md
Normal file
@@ -0,0 +1,52 @@
|
||||
---
|
||||
name: ❓ Support Request
|
||||
about: Get help with using Evercatch
|
||||
title: '[SUPPORT] '
|
||||
labels: question
|
||||
assignees: ''
|
||||
---
|
||||
|
||||
## Issue Summary
|
||||
<!-- Brief description of what you need help with -->
|
||||
|
||||
## What I'm Trying to Do
|
||||
<!-- Describe your goal -->
|
||||
|
||||
## What I've Tried
|
||||
<!-- List what you've already attempted -->
|
||||
|
||||
1.
|
||||
2.
|
||||
3.
|
||||
|
||||
## Account Information
|
||||
- **Email**: (your account email)
|
||||
- **User ID** (if known):
|
||||
- **Subscription Tier**: Sandbox / Indie / Studio / Enterprise
|
||||
|
||||
## Relevant Documentation
|
||||
<!-- Links to docs you've read -->
|
||||
- [ ] I've searched [docs.evercatch.dev](https://docs.evercatch.dev)
|
||||
- [ ] I've checked [existing issues](../../issues)
|
||||
- [ ] I've reviewed the [API docs](https://docs.evercatch.dev/api)
|
||||
|
||||
## Error Messages
|
||||
<!-- If applicable, paste any error messages -->
|
||||
```
|
||||
Paste error here
|
||||
```
|
||||
|
||||
## Questions
|
||||
1.
|
||||
2.
|
||||
|
||||
## Screenshots
|
||||
<!-- If applicable, add screenshots -->
|
||||
|
||||
---
|
||||
|
||||
**💡 TIP:** Before opening a support ticket, check:
|
||||
- [Documentation](https://docs.evercatch.dev)
|
||||
- [API Reference](https://docs.evercatch.dev/api)
|
||||
- [Existing Issues](../../issues)
|
||||
- [Status Page](https://status.evercatch.dev)
|
||||
@@ -1,95 +0,0 @@
|
||||
name: ❓ Support Request
|
||||
about: Get help with using Evercatch
|
||||
title: '[SUPPORT] '
|
||||
labels: ['question']
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
**💡 Before opening a ticket, please check:**
|
||||
[Documentation](https://docs.evercatch.dev) · [API Reference](https://docs.evercatch.dev/api) · [Existing Issues](../../issues) · [Status Page](https://status.evercatch.dev)
|
||||
|
||||
- type: textarea
|
||||
id: summary
|
||||
attributes:
|
||||
label: Issue Summary
|
||||
description: Brief description of what you need help with.
|
||||
placeholder: I need help with...
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: goal
|
||||
attributes:
|
||||
label: What I'm Trying to Do
|
||||
description: Describe your goal.
|
||||
placeholder: My goal is to...
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: tried
|
||||
attributes:
|
||||
label: What I've Tried
|
||||
description: List what you've already attempted.
|
||||
placeholder: |
|
||||
1.
|
||||
2.
|
||||
3.
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: input
|
||||
id: email
|
||||
attributes:
|
||||
label: Account Email
|
||||
placeholder: you@example.com
|
||||
|
||||
- type: input
|
||||
id: user-id
|
||||
attributes:
|
||||
label: User ID (if known)
|
||||
placeholder: usr_...
|
||||
|
||||
- type: dropdown
|
||||
id: tier
|
||||
attributes:
|
||||
label: Subscription Tier
|
||||
options:
|
||||
- Sandbox (Free)
|
||||
- Indie
|
||||
- Studio
|
||||
- Enterprise
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: checkboxes
|
||||
id: docs-checked
|
||||
attributes:
|
||||
label: Relevant Documentation
|
||||
description: Please confirm you've checked these resources.
|
||||
options:
|
||||
- label: I've searched [docs.evercatch.dev](https://docs.evercatch.dev)
|
||||
- label: I've checked [existing issues](../../issues)
|
||||
- label: I've reviewed the [API docs](https://docs.evercatch.dev/api)
|
||||
|
||||
- type: textarea
|
||||
id: errors
|
||||
attributes:
|
||||
label: Error Messages
|
||||
description: If applicable, paste any error messages.
|
||||
render: shell
|
||||
|
||||
- type: textarea
|
||||
id: questions
|
||||
attributes:
|
||||
label: Questions
|
||||
placeholder: |
|
||||
1.
|
||||
2.
|
||||
|
||||
- type: textarea
|
||||
id: screenshots
|
||||
attributes:
|
||||
label: Screenshots
|
||||
description: If applicable, describe or attach screenshots.
|
||||
@@ -20,38 +20,45 @@ jobs:
|
||||
THIRTY_DAYS_AGO_SEC=$(date -d '30 days ago' '+%s')
|
||||
|
||||
# Get all open issues sorted by oldest update first
|
||||
# REMOVED 'since' because it filters for NEWER issues
|
||||
ISSUES=$(curl -s -H "Authorization: token $API_TOKEN" "$API_BASE_URL/repos/$REPO/issues?state=open&sort=updated&order=asc" | jq -c '.[]')
|
||||
|
||||
# Safety Check 1: Exit if no issues found
|
||||
# Check if we have issues to process
|
||||
if [ -z "$ISSUES" ]; then
|
||||
echo "No open issues found."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo "$ISSUES" | while IFS= read -r issue; do
|
||||
# Safety Check 2: Skip empty lines
|
||||
# Prevent processing empty lines
|
||||
if [ -z "$issue" ]; then continue; fi
|
||||
|
||||
|
||||
ISSUE_NUMBER=$(echo "$issue" | jq -r '.number')
|
||||
UPDATED_AT=$(echo "$issue" | jq -r '.updated_at')
|
||||
|
||||
# Convert issue update time to seconds
|
||||
UPDATED_AT_SEC=$(date -d "$UPDATED_AT" '+%s')
|
||||
|
||||
# Stop processing if we reach issues newer than 30 days
|
||||
# LOGIC CHECK: If the issue is newer than 30 days, stop (since list is sorted asc)
|
||||
if [ "$UPDATED_AT_SEC" -gt "$THIRTY_DAYS_AGO_SEC" ]; then
|
||||
continue
|
||||
# Found an issue updated recently, so we are done with the old ones
|
||||
continue
|
||||
fi
|
||||
|
||||
HAS_STALE_LABEL=$(echo "$issue" | jq -r '.labels[] | select(.name == "status: stale") | .name')
|
||||
|
||||
# Skip if already has stale label
|
||||
if [ -n "$HAS_STALE_LABEL" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
echo "Marking issue #$ISSUE_NUMBER as stale (last updated: $UPDATED_AT)"
|
||||
|
||||
# Add stale label
|
||||
LABELS='{"labels": ["status: stale"]}'
|
||||
curl -s -f -X POST -H "Authorization: token $API_TOKEN" -H "Content-Type: application/json" -d "$LABELS" "$API_BASE_URL/repos/$REPO/issues/$ISSUE_NUMBER/labels"
|
||||
|
||||
# Add stale comment
|
||||
STALE_MSG="This issue has been automatically marked as stale because it has not had recent activity.\n\nIt will be closed in **14 days** if no further activity occurs.\n\nIf this issue is still relevant, please:\n- Add a comment with updates\n- Remove the \`status: stale\` label\n\nThank you for your contributions! 🙏"
|
||||
COMMENT_JSON=$(jq -n --arg body "$STALE_MSG" '{"body": $body}')
|
||||
curl -s -f -X POST -H "Authorization: token $API_TOKEN" -H "Content-Type: application/json" -d "$COMMENT_JSON" "$API_BASE_URL/repos/$REPO/issues/$ISSUE_NUMBER/comments"
|
||||
@@ -59,30 +66,25 @@ jobs:
|
||||
|
||||
- name: Close stale issues
|
||||
run: |
|
||||
# Issues marked stale for 14+ days
|
||||
FOURTEEN_DAYS_AGO=$(date -u -d '14 days ago' '+%Y-%m-%dT%H:%M:%SZ')
|
||||
|
||||
# Get stale issues
|
||||
ISSUES=$(curl -s -H "Authorization: token $API_TOKEN" "$API_BASE_URL/repos/$REPO/issues?state=open&labels=status:stale" | jq -c '.[]')
|
||||
|
||||
# FIX: Check if list is empty
|
||||
if [ -z "$ISSUES" ]; then
|
||||
echo "No stale issues found to close."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo "$ISSUES" | while IFS= read -r issue; do
|
||||
# FIX: Check for empty line
|
||||
if [ -z "$issue" ]; then continue; fi
|
||||
|
||||
ISSUE_NUMBER=$(echo "$issue" | jq -r '.number')
|
||||
UPDATED_AT=$(echo "$issue" | jq -r '.updated_at')
|
||||
|
||||
# Check if updated_at is older than 14 days
|
||||
if [[ "$UPDATED_AT" < "$FOURTEEN_DAYS_AGO" ]]; then
|
||||
echo "Closing stale issue #$ISSUE_NUMBER (last updated: $UPDATED_AT)"
|
||||
|
||||
# Close the issue
|
||||
CLOSE_JSON='{"state": "closed"}'
|
||||
curl -s -f -X PATCH -H "Authorization: token $API_TOKEN" -H "Content-Type: application/json" -d "$CLOSE_JSON" "$API_BASE_URL/repos/$REPO/issues/$ISSUE_NUMBER"
|
||||
|
||||
# Add closing comment
|
||||
CLOSE_MSG="This issue was automatically closed due to inactivity.\n\nIf you believe this was closed in error, please:\n1. Reopen the issue\n2. Provide updated information\n3. Remove the \`status: stale\` label\n\nThank you! 🙏"
|
||||
COMMENT_JSON=$(jq -n --arg body "$CLOSE_MSG" '{"body": $body}')
|
||||
curl -s -f -X POST -H "Authorization: token $API_TOKEN" -H "Content-Type: application/json" -d "$COMMENT_JSON" "$API_BASE_URL/repos/$REPO/issues/$ISSUE_NUMBER/comments"
|
||||
@@ -91,29 +93,21 @@ jobs:
|
||||
|
||||
- name: Remove stale label on activity
|
||||
run: |
|
||||
# Get stale issues that were recently updated
|
||||
ISSUES=$(curl -s -H "Authorization: token $API_TOKEN" "$API_BASE_URL/repos/$REPO/issues?state=open&labels=status:stale" | jq -c '.[]')
|
||||
|
||||
# FIX: Check if list is empty
|
||||
if [ -z "$ISSUES" ]; then
|
||||
echo "No stale issues found to check for activity."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo "$ISSUES" | while IFS= read -r issue; do
|
||||
# FIX: Check for empty line
|
||||
if [ -z "$issue" ]; then continue; fi
|
||||
|
||||
ISSUE_NUMBER=$(echo "$issue" | jq -r '.number')
|
||||
|
||||
# Get comments
|
||||
COMMENTS=$(curl -s -H "Authorization: token $API_TOKEN" "$API_BASE_URL/repos/$REPO/issues/$ISSUE_NUMBER/comments")
|
||||
LATEST_COMMENT_AUTHOR=$(echo "$COMMENTS" | jq -r '.[-1].user.login // empty')
|
||||
|
||||
# Skip if no comments exist or fetch failed
|
||||
if [ -z "$LATEST_COMMENT_AUTHOR" ]; then continue; fi
|
||||
LATEST_COMMENT_AUTHOR=$(echo "$COMMENTS" | jq -r '.[-1].user.login')
|
||||
|
||||
# If latest comment is not from bot, remove stale label
|
||||
if [ "$LATEST_COMMENT_AUTHOR" != "EC-bot" ] && [ "$LATEST_COMMENT_AUTHOR" != "gitea-actions" ]; then
|
||||
echo "Removing stale label from issue #$ISSUE_NUMBER (recent activity detected)"
|
||||
|
||||
# Get label ID
|
||||
LABELS=$(curl -s -H "Authorization: token $API_TOKEN" "$API_BASE_URL/repos/$REPO/issues/$ISSUE_NUMBER/labels")
|
||||
STALE_LABEL_ID=$(echo "$LABELS" | jq -r '.[] | select(.name == "status: stale") | .id')
|
||||
|
||||
|
||||
408
README.md
408
README.md
@@ -1,69 +1,65 @@
|
||||
<div align="center">
|
||||
<p align="center">
|
||||
<img src="assets/banner.png" alt="Evercatch Banner" width="800">
|
||||
</p>
|
||||
|
||||
<img src="assets/banner.png" alt="Evercatch" width="800">
|
||||
<p align="center">
|
||||
<strong>The webhook infrastructure platform for developers who want simplicity without sacrificing power.</strong>
|
||||
</p>
|
||||
|
||||
<br/>
|
||||
<br/>
|
||||
|
||||
<img src="https://img.shields.io/badge/STATUS-ALPHA-red?style=flat-square&labelColor=000" alt="ALPHA">
|
||||
|
||||
<img src="https://img.shields.io/badge/BETA-JUNE%202026-orange?style=flat-square&labelColor=000" alt="Beta June 2026">
|
||||
|
||||
<img src="https://img.shields.io/badge/CLOSED%20SOURCE-111?style=flat-square&labelColor=000" alt="Closed Source">
|
||||
|
||||
<br/>
|
||||
<br/>
|
||||
|
||||
### Webhook infrastructure that just works.
|
||||
|
||||
**One endpoint. Any provider. Reliable delivery.**
|
||||
|
||||
Point every webhook at Evercatch. We capture, normalize, and forward them to your app — with retries, history, and zero glue code.
|
||||
|
||||
<br/>
|
||||
|
||||
[Join the Beta](#-join-the-beta) · [Roadmap](ROADMAP.md) · [Docs](https://docs.evercatch.dev) · [Status](https://status.evercatch.dev) · [Pricing](#-pricing)
|
||||
|
||||
</div>
|
||||
|
||||
<br/>
|
||||
|
||||
> [!WARNING]
|
||||
> **Evercatch is in active ALPHA development and is not production-ready.** Most external links (docs, dashboard, API, blog) will not be live until the beta launch. Interested in early access? Reach out at [contact@evercatch.dev](mailto:contact@evercatch.dev).
|
||||
<p align="center">
|
||||
<a href="https://evercatch.dev">Website</a> •
|
||||
<a href="https://docs.evercatch.dev">Docs</a> •
|
||||
<a href="https://app.evercatch.dev">Dashboard</a> •
|
||||
<a href="https://status.evercatch.dev">Status</a>
|
||||
</p>
|
||||
|
||||
---
|
||||
|
||||
## The Problem
|
||||
> **The webhook infrastructure platform for developers who want simplicity without sacrificing power.**
|
||||
|
||||
You're wiring up Stripe, SendGrid, GitHub, Shopify — all at once. Each one speaks a different language:
|
||||
|
||||
- Different payload schemas
|
||||
- Different signature verification methods
|
||||
- Different retry semantics
|
||||
- No single place to debug, search, or replay events
|
||||
|
||||
**You're writing glue code instead of shipping features.**
|
||||
|
||||
## The Fix
|
||||
|
||||
```
|
||||
Your Providers → Evercatch → Your App
|
||||
```
|
||||
|
||||
Point every webhook at a single Evercatch endpoint. We handle the rest:
|
||||
|
||||
- **Normalize** every payload to a unified schema
|
||||
- **Validate** signatures so you don't have to
|
||||
- **Store** events with configurable retention (24h → 90 days)
|
||||
- **Forward** to your destination with automatic retries and exponential backoff
|
||||
- **Replay** any event from your dashboard in seconds
|
||||
Evercatch is a modern webhook ingestion and forwarding platform that captures, normalizes, and reliably delivers webhooks from any source to any destination. Built for developers, by developers.
|
||||
|
||||
---
|
||||
|
||||
## Quick Start
|
||||
## 📋 What is Evercatch?
|
||||
|
||||
### 1. Create an account
|
||||
Evercatch sits between your webhook providers (Stripe, SendGrid, GitHub, etc.) and your application, giving you:
|
||||
|
||||
- **📦 Unified Schema** - One normalized format for all webhook providers
|
||||
- **🔄 Reliable Delivery** - Automatic retries with exponential backoff
|
||||
- **📊 Event History** - Search, filter, and replay webhooks up to 90 days
|
||||
- **⚡ Lightning Fast** - Sub-100ms webhook ingestion
|
||||
- **🔐 Secure by Design** - API key authentication, filtered sensitive data
|
||||
- **💰 Usage-Based Pricing** - Pay only for what you use, with generous free tier
|
||||
|
||||
---
|
||||
|
||||
## 💡 Why Evercatch?
|
||||
|
||||
### The Problem
|
||||
You're integrating with multiple services (Stripe for payments, SendGrid for emails, Shopify for orders). Each has:
|
||||
- Different webhook formats
|
||||
- Different retry behaviors
|
||||
- Different ways to verify authenticity
|
||||
- No central dashboard to debug issues
|
||||
|
||||
**You spend more time managing webhooks than building your product.**
|
||||
|
||||
### The Evercatch Solution
|
||||
Point all your webhooks at Evercatch. We:
|
||||
1. ✅ Receive and validate webhooks from any provider
|
||||
2. ✅ Normalize them to a unified schema
|
||||
3. ✅ Store them with intelligent retention (7-90 days)
|
||||
4. ✅ Forward them to your app with automatic retries
|
||||
5. ✅ Give you a beautiful dashboard to search, filter, and replay events
|
||||
|
||||
**You focus on your product. We handle the webhooks.**
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Quick Start
|
||||
|
||||
### 1. Sign Up
|
||||
```bash
|
||||
curl -X POST https://api.evercatch.dev/api/v1/auth/signup \
|
||||
-H "Content-Type: application/json" \
|
||||
@@ -74,248 +70,178 @@ curl -X POST https://api.evercatch.dev/api/v1/auth/signup \
|
||||
}'
|
||||
```
|
||||
|
||||
**Response:**
|
||||
```json
|
||||
{
|
||||
"user": { "id": "550e8400-e29b-...", "email": "you@example.com" },
|
||||
"api_key": { "api_key": "ec_live_abc123...", "prefix": "ec_live_abc1" },
|
||||
"subscription": { "tier": "sandbox", "status": "active" }
|
||||
"user": { "id": "550e8400-...", "email": "you@example.com" },
|
||||
"api_key": {
|
||||
"api_key": "ec_live_abc123...",
|
||||
"prefix": "ec_live_abc1"
|
||||
},
|
||||
"subscription": { "tier": "sandbox", "status": "trialing" }
|
||||
}
|
||||
```
|
||||
|
||||
### 2. Point your webhook provider at Evercatch
|
||||
|
||||
### 2. Point Your Webhooks at Evercatch
|
||||
```
|
||||
https://api.evercatch.dev/api/v1/webhooks/{provider}/{your-user-id}
|
||||
https://api.evercatch.dev/api/v1/webhooks/stripe/550e8400-...
|
||||
```
|
||||
|
||||
Configure Stripe in 30 seconds:
|
||||
1. Open [Stripe Dashboard → Webhooks](https://dashboard.stripe.com/webhooks)
|
||||
2. Add endpoint → paste your Evercatch URL
|
||||
3. Add header: `X-API-Key: ec_live_abc123...`
|
||||
4. Select events → done
|
||||
|
||||
### 3. Register a destination
|
||||
**Example: Configure Stripe**
|
||||
1. Go to [Stripe Dashboard → Webhooks](https://dashboard.stripe.com/webhooks)
|
||||
2. Click "Add Endpoint"
|
||||
3. Enter: `https://api.evercatch.dev/api/v1/webhooks/stripe/550e8400-...`
|
||||
4. Select events
|
||||
5. Add header: `X-API-Key: ec_live_abc123...`
|
||||
|
||||
### 3. Configure Your Destination
|
||||
```bash
|
||||
curl -X POST https://api.evercatch.dev/api/v1/destinations \
|
||||
-H "X-API-Key: ec_live_abc123..." \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"name": "My API",
|
||||
"name": "Production API",
|
||||
"url": "https://yourapp.com/webhooks",
|
||||
"providers": ["stripe"],
|
||||
"event_types": ["payment.*"]
|
||||
}'
|
||||
```
|
||||
|
||||
Evercatch now receives, normalizes, stores, and forwards every matching event — automatically retrying on failure.
|
||||
|
||||
### Or use a native SDK
|
||||
|
||||
```python
|
||||
# Python
|
||||
from evercatch import Evercatch
|
||||
|
||||
ec = Evercatch("ec_live_abc123...")
|
||||
ec.destinations.create(
|
||||
name="My API",
|
||||
url="https://yourapp.com/webhooks",
|
||||
providers=["stripe"],
|
||||
event_types=["payment.*"],
|
||||
)
|
||||
```
|
||||
|
||||
```typescript
|
||||
// Node.js / TypeScript
|
||||
import { Evercatch } from "@evercatch/sdk";
|
||||
|
||||
const ec = new Evercatch("ec_live_abc123...");
|
||||
await ec.destinations.create({
|
||||
name: "My API",
|
||||
url: "https://yourapp.com/webhooks",
|
||||
providers: ["stripe"],
|
||||
eventTypes: ["payment.*"],
|
||||
});
|
||||
```
|
||||
### 4. That's It! 🎉
|
||||
Evercatch now:
|
||||
- ✅ Receives webhooks from Stripe
|
||||
- ✅ Normalizes them to a unified schema
|
||||
- ✅ Stores them for 24 hours (Sandbox tier)
|
||||
- ✅ Forwards them to `yourapp.com/webhooks`
|
||||
- ✅ Retries on failure
|
||||
|
||||
---
|
||||
|
||||
## Integrations
|
||||
## 📊 Pricing
|
||||
|
||||
We are launching with major integrations from day one, with more coming after beta.
|
||||
| Plan | Price | Events/mo | Retention | Destinations | Overage |
|
||||
|------|-------|-----------|-----------|--------------|---------|
|
||||
| **Sandbox** | €0 | 100k | 24 hours | 2 | — |
|
||||
| **Indie** | €29 | 1M | 7 days | 10 | €0.50/100k |
|
||||
| **Studio** | €99 | 10M | 30 days | Unlimited | €0.30/100k |
|
||||
| **Enterprise** | €299 | 50M | 90 days | Unlimited | €0.20/100k |
|
||||
|
||||
| Provider | Incoming Webhooks | Signature Verification | Normalized Schema |
|
||||
|----------|:-----------------:|:---------------------:|:-----------------:|
|
||||
| **Stripe** | ✅ | ✅ | ✅ |
|
||||
| **More at launch** | ✅ | ✅ | ✅ |
|
||||
**All plans include:**
|
||||
- ✅ Unlimited API keys
|
||||
- ✅ Real-time event forwarding
|
||||
- ✅ Automatic retries
|
||||
- ✅ 99.9% uptime SLA
|
||||
- ✅ Support via email
|
||||
|
||||
> New integrations are tracked in [ROADMAP.md](ROADMAP.md). Want to see a specific provider? [Request it here](https://git.psmattas.com/Evercatch/.profile/issues/new?template=.gitea%2fissue_template%2ffeature_request.yml).
|
||||
**Studio+ includes:**
|
||||
- ✨ Full-text search
|
||||
- ✨ Advanced filtering
|
||||
- ✨ Event replay
|
||||
- ✨ Custom retention
|
||||
|
||||
**Enterprise includes:**
|
||||
- 🚀 Priority support
|
||||
- 🚀 Custom SLAs
|
||||
- 🚀 Dedicated Slack channel
|
||||
- 🚀 SSO/SAML
|
||||
- 🚀 Custom contracts
|
||||
|
||||
[**→ Start Free**](https://evercatch.dev/signup) · [**→ View Full Pricing**](https://evercatch.dev/pricing)
|
||||
|
||||
---
|
||||
|
||||
## SDKs
|
||||
## 🐛 Found a Bug?
|
||||
|
||||
Native, idiomatic clients for your language — all built on the same REST API.
|
||||
We want to fix it! **[→ Report a Bug](../../issues/new?template=bug_report.md)**
|
||||
|
||||
| Language | Package | Status |
|
||||
|----------|---------|--------|
|
||||
| **Python** | `pip install evercatch` | Launching with beta |
|
||||
| **Node.js / TypeScript** | `npm install @evercatch/sdk` | Launching with beta |
|
||||
| **Go** | `go get github.com/evercatch/evercatch-go` | Launching with beta |
|
||||
| **Ruby** | `gem install evercatch` | Launching with beta |
|
||||
Please include:
|
||||
- Clear steps to reproduce
|
||||
- Expected vs actual behavior
|
||||
- Your subscription tier
|
||||
- Event IDs (if applicable)
|
||||
|
||||
All SDKs support the full API surface: destinations, event history, replays, and API key management.
|
||||
**Do NOT include API keys or sensitive data.**
|
||||
|
||||
---
|
||||
|
||||
## CLI
|
||||
## ✨ Have a Feature Idea?
|
||||
|
||||
A first-class CLI tool ships at launch for local development workflows.
|
||||
We'd love to hear it! **[→ Request a Feature](../../issues/new?template=feature_request.md)**
|
||||
|
||||
```bash
|
||||
# Install
|
||||
npm install -g @evercatch/cli
|
||||
|
||||
# Authenticate
|
||||
ec auth login
|
||||
|
||||
# Forward live events to your local server during development
|
||||
ec listen --forward http://localhost:3000/webhooks
|
||||
|
||||
# Replay a past event
|
||||
ec events replay evt_01j9x...
|
||||
|
||||
# Inspect recent events
|
||||
ec events list --provider stripe --limit 20
|
||||
```
|
||||
|
||||
The CLI is designed to replace `ngrok` style tunnelling for webhook development — no tunnels needed, just replay and inspect from your terminal.
|
||||
Tell us:
|
||||
- What problem it solves
|
||||
- How you'd use it
|
||||
- Which tier would benefit
|
||||
|
||||
---
|
||||
|
||||
## Pricing
|
||||
## 🔐 Security Vulnerability?
|
||||
|
||||
| Plan | Price | Events / mo | Retention | Destinations | Overage |
|
||||
|------|-------|-------------|-----------|--------------|---------|
|
||||
| **Sandbox** | Free | 100k | 24 hours | 2 | — |
|
||||
| **Indie** | €29 / mo | 1M | 7 days | 10 | €0.50 / 100k |
|
||||
| **Studio** | €99 / mo | 10M | 30 days | Unlimited | €0.30 / 100k |
|
||||
| **Enterprise** | €299 / mo | 50M | 90 days | Unlimited | €0.20 / 100k |
|
||||
**DO NOT open a public issue.**
|
||||
|
||||
<details>
|
||||
<summary>What's included in each plan</summary>
|
||||
**Email:** [security@evercatch.dev](mailto:security@evercatch.dev)
|
||||
|
||||
<br/>
|
||||
|
||||
**All plans**
|
||||
- Unlimited API keys
|
||||
- Real-time event forwarding
|
||||
- Automatic retries with exponential backoff
|
||||
- 99.9% uptime SLA
|
||||
- Email support
|
||||
|
||||
**Studio and above**
|
||||
- Full-text event search
|
||||
- Advanced filtering
|
||||
- Event replay
|
||||
- Custom retention windows
|
||||
|
||||
**Enterprise**
|
||||
- Priority support + dedicated Slack channel
|
||||
- Custom SLAs and contracts
|
||||
- SSO / SAML
|
||||
- Custom retention and event volume
|
||||
|
||||
</details>
|
||||
|
||||
[Start Free →](https://evercatch.dev/signup) · [View Full Pricing →](https://evercatch.dev/pricing)
|
||||
We'll respond within 24 hours. See our [Security Policy](SECURITY.md) for details.
|
||||
|
||||
---
|
||||
|
||||
## Join the Beta
|
||||
## ❓ Need Help?
|
||||
|
||||
> We are preparing for **beta launch in June 2026** *(tentative)*. See [ROADMAP.md](ROADMAP.md) for details.
|
||||
|
||||
We're looking for early developers to test the platform before public launch. Sign up, try it out, and share honest feedback — we'll set you up with a **free Indie or higher subscription** account for the duration of testing.
|
||||
|
||||
**To join the beta developer list:**
|
||||
|
||||
Send an email to [contact@evercatch.dev](mailto:contact@evercatch.dev) with the subject line **`Beta Dev List`** and a short description of your use case.
|
||||
|
||||
We'll follow up with access details as we get closer to launch.
|
||||
- 📚 **Documentation**: [docs.evercatch.dev](https://docs.evercatch.dev)
|
||||
- 📧 **Email Support**: [support@evercatch.dev](mailto:support@evercatch.dev)
|
||||
- 💳 **Billing**: [billing@evercatch.dev](mailto:billing@evercatch.dev)
|
||||
- **[→ Open a Support Ticket](../../issues/new?template=support_request.md)**
|
||||
|
||||
---
|
||||
|
||||
## Reference
|
||||
## 📚 Resources
|
||||
|
||||
<details>
|
||||
<summary>Found a bug?</summary>
|
||||
|
||||
<br/>
|
||||
|
||||
**[→ Open a Bug Report](https://git.psmattas.com/Evercatch/.profile/issues/new?template=.gitea%2fissue_template%2fbug_report.yml)**
|
||||
|
||||
Include: steps to reproduce · expected vs actual behaviour · your subscription tier · event IDs if applicable.
|
||||
|
||||
Do **not** include API keys or sensitive data in public issues.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Have a feature request?</summary>
|
||||
|
||||
<br/>
|
||||
|
||||
**[→ Open a Feature Request](https://git.psmattas.com/Evercatch/.profile/issues/new?template=.gitea%2fissue_template%2ffeature_request.yml)**
|
||||
|
||||
Tell us what problem it solves, how you'd use it, and which tier it matters most for.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Security vulnerability?</summary>
|
||||
|
||||
<br/>
|
||||
|
||||
**Do not open a public issue.**
|
||||
|
||||
Email [security@evercatch.dev](mailto:security@evercatch.dev) — we respond within 24 hours. See [SECURITY.md](SECURITY.md) for our full disclosure policy and bug bounty details.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Need help?</summary>
|
||||
|
||||
<br/>
|
||||
|
||||
- [docs.evercatch.dev](https://docs.evercatch.dev) — full documentation
|
||||
- [support@evercatch.dev](mailto:support@evercatch.dev) — email support
|
||||
- [billing@evercatch.dev](mailto:billing@evercatch.dev) — billing questions
|
||||
- [Open a support ticket →](https://git.psmattas.com/Evercatch/.profile/issues/new?template=.gitea%2fissue_template%2fsupport_request.yml)
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Legal</summary>
|
||||
|
||||
<br/>
|
||||
|
||||
[Terms of Service](https://evercatch.dev/terms) · [Privacy Policy](https://evercatch.dev/privacy) · [SLA](https://evercatch.dev/sla) · [Acceptable Use](https://evercatch.dev/acceptable-use)
|
||||
|
||||
Community: [Code of Conduct](CODE_OF_CONDUCT.md) — report violations to [conduct@evercatch.dev](mailto:conduct@evercatch.dev)
|
||||
|
||||
</details>
|
||||
- **Documentation:** [docs.evercatch.dev](https://docs.evercatch.dev)
|
||||
- **API Reference:** [docs.evercatch.dev/api](https://docs.evercatch.dev/api)
|
||||
- **Status Page:** [status.evercatch.dev](https://status.evercatch.dev)
|
||||
- **Blog:** [blog.evercatch.dev](https://blog.evercatch.dev)
|
||||
- **Roadmap:** [roadmap.evercatch.dev](https://roadmap.evercatch.dev)
|
||||
- **Changelog:** [changelog.evercatch.dev](https://changelog.evercatch.dev)
|
||||
|
||||
---
|
||||
|
||||
<div align="center">
|
||||
## 🤝 Contributing
|
||||
|
||||
<br/>
|
||||
We welcome community contributions! See [CONTRIBUTING.md](CONTRIBUTING.md) for:
|
||||
- Bug reports
|
||||
- Feature requests
|
||||
- Documentation improvements
|
||||
- Beta testing
|
||||
- Integration examples
|
||||
|
||||
**No webhook left behind.**
|
||||
---
|
||||
|
||||
<br/>
|
||||
## 📜 Code of Conduct
|
||||
|
||||
[evercatch.dev](https://evercatch.dev) · [status.evercatch.dev](https://status.evercatch.dev) · [contact@evercatch.dev](mailto:contact@evercatch.dev)
|
||||
All community members must follow our [Code of Conduct](CODE_OF_CONDUCT.md).
|
||||
|
||||
</div>
|
||||
**TL;DR:** Be respectful, professional, and kind. No harassment, discrimination, or spam.
|
||||
|
||||
**Report violations:** [conduct@evercatch.dev](mailto:conduct@evercatch.dev)
|
||||
|
||||
---
|
||||
|
||||
## ⚖️ Legal
|
||||
|
||||
- **Terms of Service:** [evercatch.dev/terms](https://evercatch.dev/terms)
|
||||
- **Privacy Policy:** [evercatch.dev/privacy](https://evercatch.dev/privacy)
|
||||
- **SLA:** [evercatch.dev/sla](https://evercatch.dev/sla)
|
||||
- **Acceptable Use:** [evercatch.dev/acceptable-use](https://evercatch.dev/acceptable-use)
|
||||
|
||||
---
|
||||
|
||||
<p align="center">
|
||||
<img src="assets/banner.png" alt="Evercatch Banner" width="800">
|
||||
<br/>
|
||||
<strong>No webhook left behind</strong>
|
||||
<br/><br/>
|
||||
<a href="https://evercatch.dev">Website</a> •
|
||||
<a href="https://docs.evercatch.dev">Docs</a> •
|
||||
<a href="https://app.evercatch.dev">Dashboard</a> •
|
||||
<a href="https://status.evercatch.dev">Status</a>
|
||||
</p>
|
||||
|
||||
99
ROADMAP.md
99
ROADMAP.md
@@ -1,99 +0,0 @@
|
||||
<div align="center">
|
||||
|
||||
# Evercatch Roadmap
|
||||
|
||||
**Beta launch tentatively planned for June 2026.**
|
||||
|
||||
This is a high-level overview. Evercatch is a closed-source project — a detailed public roadmap is not available at this time. This document will be updated as we get closer to launch.
|
||||
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
> [!CAUTION]
|
||||
> All timelines are **tentative** and subject to change. Nothing here should be treated as a commitment.
|
||||
|
||||
---
|
||||
|
||||
## Beta Launch — June 2026 *(tentative)*
|
||||
|
||||
The initial beta release is focused on delivering a solid, well-tested core. Here is what we are targeting for day one:
|
||||
|
||||
### Integrations
|
||||
|
||||
We are launching with major webhook provider integrations from day one. Each integration includes:
|
||||
|
||||
- Incoming webhook ingestion
|
||||
- Cryptographic signature verification
|
||||
- Payload normalisation to the Evercatch unified schema
|
||||
|
||||
Additional integrations will be added in the weeks following beta launch based on community demand.
|
||||
|
||||
> Want to see a specific integration? [Request it →](https://git.psmattas.com/Evercatch/.profile/issues/new?template=.gitea%2fissue_template%2ffeature_request.yml)
|
||||
|
||||
### Native SDKs
|
||||
|
||||
First-party SDK support is shipping with beta:
|
||||
|
||||
| SDK | Install | Notes |
|
||||
|-----|---------|-------|
|
||||
| **Python** | `pip install evercatch` | Full API coverage |
|
||||
| **Node.js / TypeScript** | `npm install @evercatch/sdk` | Full API coverage, typed |
|
||||
| **Go** | `go get github.com/evercatch/evercatch-go` | Full API coverage |
|
||||
| **Ruby** | `gem install evercatch` | Full API coverage |
|
||||
|
||||
All SDKs target the same REST API surface and will be kept in sync with API changes.
|
||||
|
||||
### CLI Tool
|
||||
|
||||
A dedicated CLI for local development ships at beta launch:
|
||||
|
||||
```
|
||||
@evercatch/cli
|
||||
```
|
||||
|
||||
**Key capabilities:**
|
||||
|
||||
- `ec auth login` — authenticate your local environment
|
||||
- `ec listen` — receive and forward live events to a local server without tunnelling
|
||||
- `ec events list` — browse recent events with filtering
|
||||
- `ec events replay <id>` — replay any stored event to any destination
|
||||
- `ec destinations list / create / delete` — manage destinations from the terminal
|
||||
|
||||
The CLI is a first-class tool, not an afterthought. The goal is to make local webhook development fast and debuggable.
|
||||
|
||||
### Dashboard & API
|
||||
|
||||
- Full web dashboard for event browsing, search, filtering, and replay
|
||||
- REST API with comprehensive coverage
|
||||
- API key management with per-key scoping
|
||||
|
||||
---
|
||||
|
||||
## Join the Beta
|
||||
|
||||
We are looking for developers to test Evercatch before public launch. Beta testers who provide **valuable feedback** will receive a **free Indie or higher subscription** account for the duration of testing.
|
||||
|
||||
**To get on the list:**
|
||||
|
||||
Email [contact@evercatch.dev](mailto:contact@evercatch.dev) with subject line **`Beta Dev List`** and a short description of your use case. We will follow up with access details closer to launch.
|
||||
|
||||
For general questions or feedback: [support@evercatch.dev](mailto:support@evercatch.dev)
|
||||
|
||||
---
|
||||
|
||||
## Post-Beta
|
||||
|
||||
We will share more details about the post-beta roadmap after the initial launch. Areas we are actively thinking about include:
|
||||
|
||||
- Additional webhook provider integrations
|
||||
- Extended SDK language support
|
||||
- Advanced event filtering and routing rules
|
||||
- Team and organisation features
|
||||
- Custom webhook transformation pipelines
|
||||
|
||||
---
|
||||
|
||||
*Last updated: February 2026*
|
||||
|
||||
[← Back to README](README.md)
|
||||
Reference in New Issue
Block a user