Skip to content
Open
Changes from all commits
Commits
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
95 changes: 88 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,89 @@
# **contentport — public roadmap (last updated: 29th Nov 2025)**
<!-- PROJECT LOGO -->
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lines 1-36 are basically just a visual touch up, preview is in the Demo section of the PR description

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Image

<p align="center">
<a href="https://github.com/contentport">
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Fix repository references to match actual GitHub path.

The repository links point to the contentport organization, but the actual repository is joschan21/contentport (as shown in the clone commands at lines 58 and 60). This will cause 404 errors when users click these links.

🔗 Proposed fix for repository links
-  <a href="https://github.com/contentport">
+  <a href="https://github.com/joschan21/contentport">
-    <a href="https://github.com/contentport/issues">Issues</a>
+    <a href="https://github.com/joschan21/contentport/issues">Issues</a>
-   <a href="https://github.com/contentport/stargazers"><img src="https://img.shields.io/github/stars/contentport" alt="Github Stars"></a>
-   <a href="https://github.com/contentport/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue" alt="License"></a>
+   <a href="https://github.com/joschan21/contentport/stargazers"><img src="https://img.shields.io/github/stars/joschan21/contentport" alt="Github Stars"></a>
+   <a href="https://github.com/joschan21/contentport/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue" alt="License"></a>

Also applies to: 19-19, 32-32

🤖 Prompt for AI Agents
In `@README.md` at line 3, Update the broken GitHub links in README.md that
currently point to "https://github.com/contentport" so they reference the
correct repository path "https://github.com/joschan21/contentport"; locate
occurrences such as the anchor tag <a href="https://github.com/contentport"> and
any other similar links (noted also around the other occurrences mentioned) and
replace them with the full joschan21/contentport URL to prevent 404s.

<img src="https://www.contentport.io/logo.png" alt="Contentport Logo" width="120">
</a>

<h3 align="center">Contentport</h3>

<p align="center">
Your content engine for growing on Twitter
<br />
<a href="https://www.contentport.io"><strong>Create and schedule Twitter content at scale »</strong></a>
<br />
<br />
<a href="https://www.contentport.io">Website</a>
·
<a href="https://www.contentport.io/features">Features</a>
·
<a href="https://github.com/contentport/issues">Issues</a>
·
<a href="https://www.contentport.io/pricing">Pricing</a>
</p>
</p>

<p align="center">
<a href="https://www.contentport.io"><img src="https://img.shields.io/badge/Website-contentport.io-2ea44f" alt="Website"></a>
<a href="https://twitter.com/contentport"><img src="https://img.shields.io/badge/Twitter-@contentport-1DA1F2?logo=twitter" alt="Twitter"></a>
<a href="https://github.com/contentport"><img src="https://img.shields.io/badge/Open%20Source-100%25-brightgreen" alt="Open Source"></a>
</p>

<p align="center">
<a href="https://github.com/contentport/stargazers"><img src="https://img.shields.io/github/stars/contentport" alt="Github Stars"></a>
<a href="https://github.com/contentport/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue" alt="License"></a>
</p>

## **Features in Pipeline**
---

# contentport

## Getting Started

> **Note:** This is a WIP and not comprehensive. Please contribute an improvement if you want to help others get started or us to offer a better onboarding experience.
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I thought it would be nice to get others to contribute if they want. Every bit helps!


### Prerequisites

- **`DATABASE_URL`** — A serverless Postgres database. This project uses Drizzle with the PostgreSQL dialect.
<a href="https://console.neon.tech/signup"><img src="https://img.shields.io/badge/Sign%20up-Neon%20Database-00e599?style=for-the-badge&logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0id2hpdGUiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyeiIvPjwvc3ZnPg==" alt="Sign up for Neon" /></a>
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unsure if this repo should be opinionated or advertise the database provider.
At the very least, it should mention a serverless postgres provider though, which I mention on line 46 since drizzle isn't DBMSs ( database management systems) agnostic and exposes different methods for mysql & postgres.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is how the a button looks like. It looks nice but it's also mentioning an opinion about a provider of choice.
CleanShot 2026-02-05 at 13 31 39@2x


Or, if you prefer the CLI: `neonctl databases create --name contentport` ([Neon CLI docs](https://neon.com/docs/reference/cli-databases))

- **`NEXT_PUBLIC_POSTHOG_KEY`** — A PostHog project API key for analytics.
<a href="https://us.posthog.com/signup"><img src="https://img.shields.io/badge/Sign%20up-PostHog-1d4aff?style=for-the-badge&logo=posthog&logoColor=white" alt="Sign up for PostHog" /></a>
Comment on lines +44 to +52
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

find . -name ".env*" -o -name "README.md" | head -20

Repository: joschan21/contentport

Length of output: 122


🏁 Script executed:

if [ -f .env.example ]; then
  echo "=== Variables in .env.example ==="
  cat .env.example
else
  echo ".env.example not found, searching for environment config files..."
  fd -H "env" -t f | grep -E "\.(env|example)" | head -20
fi

Repository: joschan21/contentport

Length of output: 1106


🏁 Script executed:

# Verify the base64 SVG badge decodes correctly
echo "PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0id2hpdGUiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyeiIvPjwvc3ZnPg==" | base64 -d | head -1

Repository: joschan21/contentport

Length of output: 222


🌐 Web query:

Neon CLI neonctl databases create command syntax documentation

💡 Result:

neonctl databases create (Neon CLI) syntax

Neon’s docs show the command as neon ... (the CLI has an alias neonctl). [2]

neon databases create [options]
# (equivalently: neonctl databases create [options])

Options (for create): [1]

  • --name <database_name> (required)
  • --branch <branch_id_or_name>
  • --owner-name <role_name>
  • --project-id <project_id> (required only if your account has >1 project)
  • --context-file <path>

Example: [1]

neon databases create --name mynewdb --owner-name john

Sources: [1] Neon Docs — “Neon CLI commands — databases” (create usage/options) • [2] Neon Docs — “Neon CLI” (shows neon with alias neonctl)


🏁 Script executed:

# Verify the Neon badge URL is valid
curl -s -o /dev/null -w "Neon badge status: %{http_code}\n" "https://img.shields.io/badge/Sign%20up-Neon%20Database-00e599?style=for-the-badge&logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0id2hpdGUiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyeiIvPjwvc3ZnPg=="

# Verify the PostHog badge URL is valid
curl -s -o /dev/null -w "PostHog badge status: %{http_code}\n" "https://img.shields.io/badge/Sign%20up-PostHog-1d4aff?style=for-the-badge&logo=posthog&logoColor=white"

# Verify Neon signup URL is valid
curl -s -o /dev/null -w "Neon signup status: %{http_code}\n" "https://console.neon.tech/signup"

# Verify PostHog signup URL is valid
curl -s -o /dev/null -w "PostHog signup status: %{http_code}\n" "https://us.posthog.com/signup"

Repository: joschan21/contentport

Length of output: 164


🏁 Script executed:

# Search the codebase to understand which env vars are required vs optional
echo "=== Checking which env vars are actually used in code ==="
rg 'process\.env\.' --no-heading -o | sed 's/.*process\.env\.//' | sed 's/[^A-Z0-9_].*//' | sort -u | head -50

Repository: joschan21/contentport

Length of output: 123


🏁 Script executed:

# Try different patterns to find env var usage
echo "=== Searching for environment variable references ==="
rg 'DATABASE_URL|OPENROUTER|UPSTASH|QSTASH|TWITTER|GOOGLE|STRIPE|FIRECRAWL|AWS_|MARBLE|BETTER_AUTH|POSTHOG' --type ts --type tsx --type js --type jsx -c | head -20

Repository: joschan21/contentport

Length of output: 163


🏁 Script executed:

# Check if there's any setup/initialization documentation
ls -la | head -20
cat package.json | grep -A 10 '"scripts"'

Repository: joschan21/contentport

Length of output: 1638


🏁 Script executed:

# Look for configuration files that document env vars
fd -t f -e "config" -e "constants" -e "setup" | head -20

Repository: joschan21/contentport

Length of output: 47


Fix incomplete Neon CLI command and document missing environment variables.

The badges render correctly, but two issues need addressing:

  1. Neon CLI command is incomplete (line 49): The example neonctl databases create --name contentport omits the --project-id parameter, which is required when a user has multiple projects in their Neon account. Consider updating to: neonctl databases create --name contentport --project-id <your-project-id> or documenting this requirement more clearly.

  2. 35 of 37 environment variables in .env.example are undocumented: Only DATABASE_URL and NEXT_PUBLIC_POSTHOG_KEY are mentioned in Prerequisites. The remaining variables (OpenRouter, Upstash Redis/Vector, QStash, Twitter API keys, Better Auth, Firecrawl, AWS, Stripe, and Marble CMS) lack any setup guidance, which will likely cause setup failures for developers. Categorize these as required or optional and provide brief setup instructions for each.

🤖 Prompt for AI Agents
In `@README.md` around lines 44 - 52, The README's Prerequisites section has two
issues: the Neon CLI example `neonctl databases create --name contentport` is
incomplete and should show the required --project-id option (e.g., `--project-id
<your-project-id>`) or a note about when it’s required; and the README only
documents DATABASE_URL and NEXT_PUBLIC_POSTHOG_KEY while the repository’s
.env.example contains many other variables (OpenRouter, Upstash Redis/Vector,
QStash, Twitter API keys, Better Auth, Firecrawl, AWS, Stripe, Marble CMS,
etc.), so update the Prerequisites to (1) fix the neonctl example to include
--project-id or explain when it’s needed, and (2) add a short categorized list
marking each .env.example variable as required or optional with one-line setup
guidance or links for each (referencing DATABASE_URL, NEXT_PUBLIC_POSTHOG_KEY
and the other .env.example variable names) so developers know how to obtain and
configure them.


### Follow along

1. **Download the source code.** Clone the repo locally:
```bash
gh repo clone joschan21/contentport
# or via HTTPS
git clone https://github.com/joschan21/contentport.git
```
2. **Configure secrets.** Set environment variables:
```bash
cp .env.example .env
```
Then fill in the keys obtained from [Prerequisites](#prerequisites) (at minimum `DATABASE_URL`).
Comment on lines +62 to +66
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot Feb 5, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# List environment variables in .env.example to align README prerequisites.
if [ -f .env.example ]; then
  echo "Vars in .env.example:"
  rg -n '^[A-Z0-9_]+=' .env.example
else
  echo ".env.example not found"
  exit 1
fi

Repository: joschan21/contentport

Length of output: 1038


🏁 Script executed:

# Read the README to see the current documentation at lines 59-63 and surrounding context
if [ -f README.md ]; then
  echo "=== README.md lines 55-70 (context) ==="
  sed -n '55,70p' README.md
else
  echo "README.md not found"
fi

Repository: joschan21/contentport

Length of output: 538


Document all required environment variables in README.
The .env.example contains 36+ variables across integrations (OpenRouter, Upstash, QStash, Twitter, Google, Firecrawl, AWS, Stripe, PostHog, Marble, etc.), but README only explicitly mentions DATABASE_URL. Specify which variables are required for basic setup versus optional for specific features to prevent setup failures.

🤖 Prompt for AI Agents
In `@README.md` around lines 59 - 63, Update the README's "Configure secrets"
section to enumerate required vs optional environment variables by reading
.env.example and listing (at minimum) the variables required for a basic local
run (e.g., DATABASE_URL, NEXTAUTH_URL/SECRET or auth-related vars, PORT if used,
and any DB migration flags) and grouping feature-specific/optional vars
(OpenRouter, Upstash, QStash, Twitter, Google, Firecrawl, AWS, Stripe, PostHog,
Marble, etc.) that are only needed when using those integrations; modify the
text around the existing "cp .env.example .env" and the "Prerequisites"
reference to include a short checklist of required keys and a pointer to the
full .env.example for optional keys so users can clearly see which variables are
mandatory to avoid setup failures.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This getting started is a "WIP" as noted in the text and prompts other to contribute to it if something's missing.

This is a good example but the author of this PR didn't event ge tto test all env vars and therefore doesn't know which ones are required to run the development server.

This is important.

However, I did list this as an "Open Question" in the PR description suggesting a library. I believe it's up to @joschan21 & @jommerkatz to decide (1) the DX and (2) the appropriate tooling for this.

CleanShot 2026-02-05 at 13 21 11@2x

Thanks for pointing this out though, I hope this discussion adds value.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seems like the humans are having a chat. I'll hop back into my burrow for now. If you need me again, just tag @coderabbitai in a new comment, and I'll come hopping out!

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Update minimum requirements to match Prerequisites.

Line 66 states "(at minimum DATABASE_URL)", but the Prerequisites section lists both DATABASE_URL and NEXT_PUBLIC_POSTHOG_KEY as required. This inconsistency may confuse users about what's truly required.

📝 Proposed fix
-   Then fill in the keys obtained from [Prerequisites](`#prerequisites`) (at minimum `DATABASE_URL`).
+   Then fill in the keys obtained from [Prerequisites](`#prerequisites`) (at minimum `DATABASE_URL` and `NEXT_PUBLIC_POSTHOG_KEY`).
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Then fill in the keys obtained from [Prerequisites](#prerequisites) (at minimum `DATABASE_URL`).
Then fill in the keys obtained from [Prerequisites](`#prerequisites`) (at minimum `DATABASE_URL` and `NEXT_PUBLIC_POSTHOG_KEY`).
🤖 Prompt for AI Agents
In `@README.md` at line 66, Update the README line that says "(at minimum
`DATABASE_URL`)" to reflect the actual prerequisites by listing both required
keys (`DATABASE_URL` and `NEXT_PUBLIC_POSTHOG_KEY`) so the minimum requirements
match the Prerequisites section; locate the sentence in README.md and change the
parenthetical to include `NEXT_PUBLIC_POSTHOG_KEY` (or alternatively adjust the
Prerequisites section if you intend a different minimum), ensuring the two
sections are consistent.

3. **Install dependencies:**
```bash
bun i
```
4. **Push the database schema:**
```bash
bun db:push
```
5. **Run the development server:**
```bash
bun dev
```

---

## **Public Roadmap** (last updated: 29th Nov 2025)

### **Features in Pipeline**

### **Priority 1**
#### **Priority 1**

* Dark mode (requested by many users)
* Responsive layout (requested by many users)
Expand Down Expand Up @@ -32,22 +113,22 @@

---

### **Priority 2**
#### **Priority 2**

* Switch between different LLMs — personal wish (Jo)
* Personalized example ideas (similar to the OpenAI Atlas Browser) — requested by many
* Voice input for assistant — personal wish (Josh)

---

### **Priority 3**
#### **Priority 3**

* Viral tweet library (potentially useful feature)
* Enable web browsing (potentially useful feature)

---

## **Bugs**
### **Bugs**

* Timezone issues / “-1 days” calendar error
* Creating transcripts from videos
Expand All @@ -56,7 +137,7 @@

---

## **Improvements**
### **Improvements**

* Assistant style handling
* Upgrade modal / paywall / email flow
Expand Down