Skip to content

Commit 9a9faeb

Browse files
committed
feat:convert && fix:api
1 parent c27c675 commit 9a9faeb

File tree

6 files changed

+70
-27
lines changed

6 files changed

+70
-27
lines changed

.env.example

+13-4
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,16 @@ NEXT_PUBLIC_GISCUS_CATEGORY=
44
NEXT_PUBLIC_GISCUS_CATEGORY_ID=
55
NEXT_PUBLIC_UTTERANCES_REPO=
66
NEXT_PUBLIC_DISQUS_SHORTNAME=
7-
NEXT_PUBLIC_MAILCHIMP_API_KEY=
8-
NEXT_PUBLIC_MAILCHIMP_API_SERVER=
9-
NEXT_PUBLIC_MAILCHIMP_AUDIENCE_ID=
10-
NEXT_PUBLIC_BUTTONDOWN=
7+
8+
9+
MAILCHIMP_API_KEY=
10+
MAILCHIMP_API_SERVER=
11+
MAILCHIMP_AUDIENCE_ID=
12+
13+
BUTTONDOWN_API_URL=https://api.buttondown.email/v1/
14+
BUTTONDOWN_API_KEY=
15+
16+
CONVERTKIT_API_URL=https://api.convertkit.com/v3/
17+
CONVERTKIT_API_KEY=
18+
CONVERTKIT_TIPS_FORM_ID=
19+
CONVERTKIT_MONTHLY_FORM_ID=

components/FormSuscribe.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ const FormSubscribe = () => {
4646
className="appearance-none w-full px-4 py-2 border border-neutrals-cool-grey-300 text-base rounded-md text-neutrals-cool-grey-900 bg-white dark:bg-black placeholder-gray-500 focus:outline-none focus:ring-primary-400 dark:focus:border-primary-600 lg:max-w-xs"
4747
id="email-input"
4848
name="email"
49-
placeholder="Enter your email"
49+
placeholder={subscribed ? "You're subscribed !" : 'Enter your email'}
5050
ref={inputEl}
5151
required
5252
type="email"

data/siteMetadata.js

+3-7
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,9 @@ const siteMetadata = {
2323
googleAnalyticsId: '', // e.g. UA-000000-2 or G-XXXXXXX
2424
},
2525
newsletter: {
26-
provider: 'mailchimp', // supported providers: mailchimp, buttondown
27-
mailChimpConfig: {
28-
apiKey: process.env.NEXT_PUBLIC_MAILCHIMP_API_KEY,
29-
apiServer: process.env.NEXT_PUBLIC_MAILCHIMP_API_SERVER,
30-
audienceId: process.env.NEXT_PUBLIC_MAILCHIMP_AUDIENCE_ID,
31-
},
32-
buttondownConfig: process.env.NEXT_PUBLIC_BUTTONDOWN,
26+
// supports mailchimp, buttondown, convertkit
27+
// Please add your .env file and modify it according to your selection
28+
provider: 'mailchimp',
3329
},
3430
comment: {
3531
// Select a provider and use the environment variables associated to it

pages/api/buttondown.js

+5-6
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
// eslint-disable-next-line import/no-anonymous-default-export
22
export default async (req, res) => {
33
const { email } = req.body
4-
5-
console.log('hello 1')
64
if (!email) {
75
return res.status(400).json({ error: 'Email is required' })
86
}
97

108
try {
11-
const API_KEY = process.env.NEXT_PUBLIC_BUTTONDOWN
12-
const response = await fetch(`https://api.buttondown.email/v1/subscribers`, {
9+
const API_KEY = process.env.BUTTONDOWN_API_KEY
10+
const buttondownRoute = `${process.env.BUTTONDOWN_API_URL}subscribers`
11+
console.log('route : ', buttondownRoute)
12+
const response = await fetch(buttondownRoute, {
1313
body: JSON.stringify({
1414
email,
1515
}),
@@ -19,10 +19,9 @@ export default async (req, res) => {
1919
},
2020
method: 'POST',
2121
})
22-
const responseMessage = await response.json()
2322

2423
if (response.status >= 400) {
25-
return res.status(500).json({ error: responseMessage[0] })
24+
return res.status(500).json({ error: `There was an error subscribing to the list.` })
2625
}
2726

2827
return res.status(201).json({ error: '' })

pages/api/convertkit.js

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
/* eslint-disable import/no-anonymous-default-export */
2+
export default async (req, res) => {
3+
const { email, list } = req.query
4+
5+
if (!email) {
6+
return res.status(400).json({ error: 'Email is required' })
7+
}
8+
9+
if (!list) {
10+
return res.status(400).json({ error: 'List is required' })
11+
}
12+
13+
try {
14+
const FORM_ID =
15+
list === '12-tips-production-apps'
16+
? process.env.CONVERTKIT_TIPS_FORM_ID
17+
: process.env.CONVERTKIT_MONTHLY_FORM_ID
18+
const API_KEY = process.env.CONVERTKIT_API_KEY
19+
const API_URL = process.env.CONVERTKIT_API_URL
20+
21+
// Send request to ConvertKit
22+
const data = { email, api_key: API_KEY }
23+
24+
const response = await fetch(`${API_URL}forms/${FORM_ID}/subscribe`, {
25+
body: JSON.stringify(data),
26+
headers: {
27+
'Content-Type': 'application/json',
28+
},
29+
method: 'POST',
30+
})
31+
32+
if (response.status >= 400) {
33+
return res.status(400).json({
34+
error: `There was an error subscribing to the list.`,
35+
})
36+
}
37+
38+
return res.status(201).json({ error: '' })
39+
} catch (error) {
40+
return res.status(500).json({ error: error.message || error.toString() })
41+
}
42+
}

pages/api/mailchimp.js

+6-9
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import mailchimp from '@mailchimp/mailchimp_marketing'
22

33
mailchimp.setConfig({
4-
apiKey: process.env.NEXT_PUBLIC_MAILCHIMP_API_KEY,
5-
server: process.env.NEXT_PUBLIC_MAILCHIMP_API_SERVER, // E.g. us1
4+
apiKey: process.env.MAILCHIMP_API_KEY,
5+
server: process.env.MAILCHIMP_API_SERVER, // E.g. us1
66
})
77

88
// eslint-disable-next-line import/no-anonymous-default-export
@@ -14,13 +14,10 @@ export default async (req, res) => {
1414
}
1515

1616
try {
17-
const test = await mailchimp.lists.addListMember(
18-
process.env.NEXT_PUBLIC_MAILCHIMP_AUDIENCE_ID,
19-
{
20-
email_address: email,
21-
status: 'subscribed',
22-
}
23-
)
17+
const test = await mailchimp.lists.addListMember(process.env.MAILCHIMP_AUDIENCE_ID, {
18+
email_address: email,
19+
status: 'subscribed',
20+
})
2421
return res.status(201).json({ error: '' })
2522
} catch (error) {
2623
return res.status(500).json({ error: error.message || error.toString() })

0 commit comments

Comments
 (0)