Skip to content
Open
Show file tree
Hide file tree
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
5 changes: 5 additions & 0 deletions .changeset/rotten-fireants-sniff.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'pliny': minor
---

Add hubspot newsletter integration
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ Pliny provides out of the box components to enhance your static site:
- Klaviyo
- Mailchimp
- Beehiiv
- Hubspot
- Command palette search with tailwind style sheet
- Algolia
- Kbar (local search)
Expand Down
2 changes: 1 addition & 1 deletion packages/pliny/src/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ const sampleConfig: PlinyConfig = {
},
},
newsletter: {
// supports mailchimp, buttondown, convertkit, klaviyo, emailOctopus
// supports mailchimp, buttondown, convertkit, klaviyo, emailOctopus, hubspot
// Please add your .env file and modify it according to your selection
provider: 'buttondown',
},
Expand Down
28 changes: 28 additions & 0 deletions packages/pliny/src/newsletter/hubspot.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
export const hubspotSubscribe = async (email: string) => {
const PORTAL_ID = process.env.HUBSPOT_PORTAL_ID
const FORM_ID = process.env.HUBSPOT_FORM_ID
const API_URL = 'https://api.hsforms.com/submissions/v3/integration/submit/'

const data = {
"submittedAt": (new Date()).getTime(),
"fields": [
{
"objectTypeId": "0-1",
"name": "email",
"value": email
}
]
}

const API_ROUTE = `${API_URL}/${PORTAL_ID}/${FORM_ID}`

const response = await fetch(API_ROUTE, {
body: JSON.stringify(data),
headers: {
'Content-Type': 'application/json',
},
method: 'POST',
})

return response
}
9 changes: 8 additions & 1 deletion packages/pliny/src/newsletter/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,10 @@ import { mailchimpSubscribe } from './mailchimp'
import { klaviyoSubscribe } from './klaviyo'
import { emailOctopusSubscribe } from './emailOctopus'
import { beehiivSubscribe } from './beehiiv'
import { hubspotSubscribe } from './hubspot'

export interface NewsletterConfig {
provider: 'buttondown' | 'convertkit' | 'klaviyo' | 'mailchimp' | 'emailoctopus' | 'beehiiv'
provider: 'buttondown' | 'convertkit' | 'klaviyo' | 'mailchimp' | 'emailoctopus' | 'beehiiv' | 'hubspot'
}

export interface NewsletterRequest extends NextApiRequest {
Expand Down Expand Up @@ -48,6 +49,9 @@ async function NewsletterAPIHandler(
case 'beehiiv':
response = await beehiivSubscribe(email)
break
case 'hubspot':
response = await hubspotSubscribe(email)
break
default:
res.status(500).json({ error: `${options.provider} not supported` })
}
Expand Down Expand Up @@ -86,6 +90,9 @@ async function NewsletterRouteHandler(req: NextRequest, options: NewsletterConfi
case 'beehiiv':
response = await beehiivSubscribe(email)
break
case 'hubspot':
response = await hubspotSubscribe(email)
break
default:
return NextResponse.json({ error: `${options.provider} not supported` }, { status: 500 })
}
Expand Down