Skip to content

Commit bca1667

Browse files
authored
Merge pull request #82 from techulus/develop
Add free tools
2 parents c481f23 + fdd0297 commit bca1667

File tree

12 files changed

+2005
-68
lines changed

12 files changed

+2005
-68
lines changed

README.md

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@
1010
<br />
1111
<a href="https://changes.page">Website</a>
1212
·
13-
<a href="https://github.com/techulus/changes-page/issues">Issues</a>
14-
·
1513
<a href="https://techulus.atlassian.net/servicedesk/customer/portal/1">Support</a>
14+
·
15+
<a href="SELF-HOSTING.md">Self-Hosting</a>
1616
</p>
1717
</p>
1818

@@ -29,6 +29,14 @@ If you want to learn more about this project or have any questions, send us an e
2929
- [Postmark](https://postmarkapp.com)
3030
- [Arcjet](https://arcjet.com)
3131

32+
## Deployment
33+
34+
<a href="https://railway.com?referralCode=techulus">
35+
<img src="https://railway.com/brand/logotype-light.png" alt="Railway" height="70" />
36+
</a>
37+
38+
Try [Railway](https://railway.com?referralCode=techulus), a modern platform that makes deploying applications simple and fast. Railway provides excellent developer experience with features like automatic deployments, built-in databases, and seamless scaling.
39+
3240
## Getting Started 🚀
3341

3442
### Requirements

SELF-HOSTING.md

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
# Self-Hosting Changes.Page
2+
3+
This guide will help you set up and deploy Changes.Page on your own infrastructure.
4+
5+
## Database Setup
6+
7+
You have two options for setting up the database:
8+
9+
### Option 1: Local Supabase (Recommended for Development)
10+
11+
Follow the official Supabase self-hosting guide using Docker:
12+
https://supabase.com/docs/guides/self-hosting/docker
13+
14+
### Option 2: Supabase Cloud
15+
16+
Create a new project at [supabase.com](https://supabase.com) and use the provided connection details.
17+
18+
## Application Deployment
19+
20+
The repository includes Docker Compose files for easy deployment of the applications.
21+
22+
1. Ensure you have Docker and Docker Compose installed
23+
2. Set up your environment variables in the respective `.env` files (see `.env.example` files in `apps/web` and `apps/page`)
24+
3. Run the applications using Docker Compose:
25+
26+
```sh
27+
docker-compose up -d
28+
```
29+
30+
## Feature Limitations
31+
32+
Please note the following limitations when self-hosting:
33+
34+
- **Billing**: Currently only supported through Stripe integration
35+
- **Custom Domains**: Only supported when deployed on Vercel
36+
- **AI Features**: All AI functionality is channeled through ManagePrompt and requires their service
37+
38+
## Environment Configuration
39+
40+
Make sure to configure the following in your environment files:
41+
42+
- Database connection details (Supabase)
43+
- Authentication keys
44+
- Stripe keys (if using billing features)
45+
- ManagePrompt API keys (if using AI features)
46+
- Any other third-party service credentials
47+
48+
For detailed environment variable setup, refer to the `.env.example` files in the respective app directories.
49+

apps/page/.env.example

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
NEXT_PUBLIC_SUPABASE_URL=
2+
NEXT_PUBLIC_SUPABASE_ANON_KEY=
3+
SUPABASE_SERVICE_ROLE_KEY=
4+
5+
# Inngest
6+
INNGEST_EVENT_KEY=
7+
8+
# Arcjet
9+
ARCJET_KEY=

apps/page/.gitignore

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,7 @@ yarn-error.log*
3535

3636
.env*
3737
.flaskenv*
38-
!.env.project
39-
!.env.vault
38+
!.env.example
4039

4140
# IDE
4241
.idea

apps/page/README.md

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,3 @@
11
## Pages App
22

33
This folder contains the pages app which renders user changelog pages.
4-
5-
### Environment Variables
6-
7-
```
8-
# Supabase details from https://app.supabase.io
9-
NEXT_PUBLIC_SUPABASE_URL=
10-
NEXT_PUBLIC_SUPABASE_ANON_KEY=
11-
SUPABASE_SERVICE_ROLE_KEY=
12-
13-
# Inngest
14-
INNGEST_EVENT_KEY=
15-
INNGEST_SIGNING_KEY=
16-
17-
# Arcjet
18-
ARCJET_KEY=
19-
```

apps/page/pages/_sites/[site]/index.tsx

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -166,22 +166,18 @@ export async function getServerSideProps({
166166
};
167167
}
168168

169-
console.time("fetchRenderData");
170169
const { page, settings } = await fetchRenderData(site);
171-
console.timeEnd("fetchRenderData");
172170

173171
if (!page || !settings || !(await isSubscriptionActive(page?.user_id))) {
174172
return {
175173
notFound: true,
176174
};
177175
}
178176

179-
console.time("fetchPosts");
180177
const { posts, postsCount } = await fetchPosts(String(page?.id), {
181178
pinned_post_id: settings?.pinned_post_id,
182179
limit: 10,
183180
});
184-
console.timeEnd("fetchPosts");
185181

186182
return {
187183
props: {

apps/web/.env.example

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
NEXT_PUBLIC_PAGES_DOMAIN=http://localhost:3000
2+
3+
# Supabase details from https://app.supabase.io
4+
NEXT_PUBLIC_SUPABASE_URL=
5+
NEXT_PUBLIC_SUPABASE_ANON_KEY=
6+
SUPABASE_SERVICE_ROLE_KEY=
7+
8+
# Stripe credentials from https://dashboard.stripe.com/apikeys
9+
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=
10+
STRIPE_SECRET_KEY=
11+
STRIPE_WEBHOOK_SECRET=
12+
STRIPE_PRICE_ID=
13+
EMAIL_NOTIFICATION_STRIPE_PRICE_ID=
14+
15+
# Custom domains
16+
VERCEL_AUTH_TOKEN=
17+
VERCEL_TEAM_ID=
18+
VERCEL_PAGES_PROJECT_ID=
19+
20+
# Postmark Emails
21+
POSTMARK_SERVER_KEY=
22+
POSTMARK_WEBHOOK_KEY=
23+
24+
# Inngest
25+
INNGEST_EVENT_KEY=
26+
INNGEST_SIGNING_KEY=
27+
28+
# Arcjet
29+
ARCJET_KEY=
30+
31+
# CMS
32+
NEXT_PUBLIC_SANITY_PROJECT_ID=jeixxcw8
33+
34+
# ManagePrompt
35+
MANAGEPROMPT_SECRET=
36+
MANAGEPROMPT_CHANGEGPT_WORKFLOW_ID=
37+
38+
# PostHog
39+
NEXT_PUBLIC_POSTHOG_KEY=
40+
NEXT_PUBLIC_POSTHOG_HOST=

apps/web/.gitignore

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,7 @@ yarn-error.log*
3535

3636
.env*
3737
.flaskenv*
38-
!.env.project
39-
!.env.vault
38+
!.env.example
4039

4140
# IDE
4241
.idea

apps/web/README.md

Lines changed: 0 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,3 @@
11
## Web App
22

33
This folder contains the dashboard app for the project and all marketing pages.
4-
5-
### Environment Variables
6-
7-
```
8-
NEXT_PUBLIC_PAGES_DOMAIN=http://localhost:3000
9-
10-
# Supabase details from https://app.supabase.io
11-
NEXT_PUBLIC_SUPABASE_URL=
12-
NEXT_PUBLIC_SUPABASE_ANON_KEY=
13-
SUPABASE_SERVICE_ROLE_KEY=
14-
SUPABASE_WEBHOOK_KEY=
15-
16-
# Stripe credentials from https://dashboard.stripe.com/apikeys
17-
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=
18-
STRIPE_SECRET_KEY=
19-
STRIPE_WEBHOOK_SECRET=
20-
STRIPE_PRICE_ID=
21-
EMAIL_NOTIFICATION_STRIPE_PRICE_ID=
22-
23-
# Open AI
24-
OPENAI_API_KEY=
25-
26-
# Custom domains
27-
VERCEL_AUTH_TOKEN=
28-
VERCEL_TEAM_ID=
29-
VERCEL_PAGES_PROJECT_ID=
30-
31-
# Postmark Emails
32-
POSTMARK_SERVER_KEY=
33-
POSTMARK_WEBHOOK_KEY=
34-
35-
# Inngest
36-
INNGEST_EVENT_KEY=
37-
INNGEST_SIGNING_KEY=
38-
39-
# CMS
40-
NEXT_PUBLIC_SANITY_PROJECT_ID=
41-
42-
# ManagePrompt
43-
MANAGEPROMPT_SECRET=
44-
MANAGEPROMPT_CHANGEGPT_WORKFLOW_ID=
45-
```

apps/web/components/layout/footer.component.tsx

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,14 @@ const navigation = {
2525
name: "ChangeCraftAI",
2626
href: "/free-tools/ai-changelog-generator",
2727
},
28+
{
29+
name: "SemVer Calculator",
30+
href: "/free-tools/semantic-version-calculator",
31+
},
32+
{
33+
name: "Release Calendar",
34+
href: "/free-tools/release-calendar",
35+
},
2836
{ name: "Blog", href: ROUTES.BLOG },
2937
],
3038
legal: [

0 commit comments

Comments
 (0)