Skip to content

Commit 446e706

Browse files
committed
Rename ConvertKit to Kit *everywhere*
1 parent c7fb7bd commit 446e706

39 files changed

+199
-200
lines changed

.env.example

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,8 @@ DISCORD_MEMBER_ROLE=111122223333444455
7070

7171
# Feature: /sign-up
7272
# Mocked: yes
73-
CONVERT_KIT_API_KEY=some_api_key
74-
CONVERT_KIT_API_SECRET=some_api_secret
73+
KIT_API_KEY=some_api_key
74+
KIT_API_SECRET=some_api_secret
7575

7676
# Feature: /chats
7777
# Mocked: yes

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ node_modules/
99
/coverage
1010
tsconfig.tsbuildinfo
1111
/prisma/sqlite.db
12+
/prisma/sqlite.db-journal
1213

1314
other/postcss.ignored
1415

@@ -25,3 +26,5 @@ other/postcss.ignored
2526
*.bkp.*
2627

2728
*.heapsnapshot
29+
30+
*.db-journal

app/components/footer.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ import { Link } from '@remix-run/react'
22
import { getImgProps, type ImageBuilder } from '#app/images.tsx'
33
import { AnchorOrLink } from '#app/utils/misc.tsx'
44
import { useRootData } from '#app/utils/use-root-data.ts'
5-
import { ConvertKitForm } from '../convertkit/form.tsx'
65
import { externalLinks } from '../external-links.tsx'
6+
import { KitForm } from '../kit/form.tsx'
77
import { IconLink } from './icon-link.tsx'
88
import { ArrowIcon, GithubIcon, RssIcon, XIcon, YoutubeIcon } from './icons.tsx'
99
import { Signature } from './signature.tsx'
@@ -31,7 +31,7 @@ function NewsletterSection() {
3131
</div>
3232

3333
<div className="mt-8">
34-
<ConvertKitForm formId="newsletter" convertKitFormId="827139" />
34+
<KitForm formId="newsletter" KitFormId="827139" />
3535
</div>
3636
</div>
3737
)
@@ -145,7 +145,7 @@ function Footer({ image }: { image: ImageBuilder }) {
145145
const { userInfo } = useRootData()
146146
const subscribedToNewsletter =
147147
Boolean(userInfo) ||
148-
userInfo?.convertKit?.tags.some(
148+
userInfo?.kit?.tags.some(
149149
({ name }) => name === 'Subscribed: general newsletter',
150150
)
151151
const featuredImg = (
Lines changed: 24 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -6,30 +6,30 @@ import { CheckIcon } from '#app/components/icons.tsx'
66
import { useRootData } from '#app/utils/use-root-data.ts'
77
import { type ActionData } from './types.ts'
88

9-
function ConvertKitForm({
9+
function KitForm({
1010
formId,
11-
convertKitTagId,
12-
convertKitFormId,
11+
kitTagId,
12+
KitFormId,
1313
}: { formId: string } & (
14-
| { convertKitTagId?: never; convertKitFormId: string }
15-
| { convertKitTagId: string; convertKitFormId?: never }
16-
| { convertKitTagId: string; convertKitFormId: string }
14+
| { kitTagId?: never; KitFormId: string }
15+
| { kitTagId: string; KitFormId?: never }
16+
| { kitTagId: string; KitFormId: string }
1717
)) {
1818
const websiteId = React.useId()
19-
const convertKit = useFetcher<ActionData>()
19+
const kit = useFetcher<ActionData>()
2020
const formRef = React.useRef<HTMLFormElement>(null)
21-
const isDone = convertKit.state === 'idle' && convertKit.data != null
22-
const convertKitData = isDone ? convertKit.data : null
21+
const isDone = kit.state === 'idle' && kit.data != null
22+
const kitData = isDone ? kit.data : null
2323
React.useEffect(() => {
24-
if (formRef.current && convertKitData?.status === 'success') {
24+
if (formRef.current && kitData?.status === 'success') {
2525
formRef.current.reset()
2626
}
27-
}, [convertKitData])
27+
}, [kitData])
2828

2929
const { user, userInfo } = useRootData()
3030

31-
const alreadySubscribed = userInfo?.convertKit?.tags.some(
32-
({ id }) => id === convertKitTagId,
31+
const alreadySubscribed = userInfo?.kit?.tags.some(
32+
({ id }) => id === kitTagId,
3333
)
3434

3535
if (alreadySubscribed) {
@@ -38,15 +38,10 @@ function ConvertKitForm({
3838
)
3939
}
4040

41-
const success = isDone && convertKitData?.status === 'success'
41+
const success = isDone && kitData?.status === 'success'
4242

4343
return (
44-
<convertKit.Form
45-
ref={formRef}
46-
action="/action/convert-kit"
47-
method="POST"
48-
noValidate
49-
>
44+
<kit.Form ref={formRef} action="/action/kit" method="POST" noValidate>
5045
<div style={{ position: 'absolute', left: '-9999px' }}>
5146
<label htmlFor={`website-url-${websiteId}`}>Your website</label>
5247
<input
@@ -58,40 +53,32 @@ function ConvertKitForm({
5853
/>
5954
</div>
6055
<input type="hidden" name="formId" value={formId} />
61-
<input type="hidden" name="convertKitTagId" value={convertKitTagId} />
62-
<input type="hidden" name="convertKitFormId" value={convertKitFormId} />
56+
<input type="hidden" name="kitTagId" value={kitTagId} />
57+
<input type="hidden" name="KitFormId" value={KitFormId} />
6358
<Field
6459
name="firstName"
6560
label="First name"
66-
error={
67-
convertKitData?.status === 'error'
68-
? convertKitData.errors.firstName
69-
: null
70-
}
61+
error={kitData?.status === 'error' ? kitData.errors.firstName : null}
7162
autoComplete="given-name"
7263
defaultValue={user?.firstName}
7364
required
74-
disabled={convertKit.state !== 'idle' || success}
65+
disabled={kit.state !== 'idle' || success}
7566
/>
7667

7768
<Field
7869
name="email"
7970
label="Email"
8071
autoComplete="email"
81-
error={
82-
convertKitData?.status === 'error'
83-
? convertKitData.errors.email
84-
: null
85-
}
72+
error={kitData?.status === 'error' ? kitData.errors.email : null}
8673
defaultValue={user?.email}
87-
disabled={convertKit.state !== 'idle' || success}
74+
disabled={kit.state !== 'idle' || success}
8875
/>
8976

9077
{success ? (
9178
<div className="flex">
9279
<CheckIcon />
9380
<p className="text-secondary">
94-
{userInfo?.convertKit
81+
{userInfo?.kit
9582
? `Sweet, you're all set`
9683
: `Sweet, check your email for confirmation.`}
9784
</p>
@@ -101,8 +88,8 @@ function ConvertKitForm({
10188
Sign me up
10289
</ArrowButton>
10390
)}
104-
</convertKit.Form>
91+
</kit.Form>
10592
)
10693
}
10794

108-
export { ConvertKitForm }
95+
export { KitForm }
Lines changed: 34 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import { getRequiredServerEnvVar } from '../utils/misc.tsx'
22

3-
const CONVERT_KIT_API_SECRET = getRequiredServerEnvVar('CONVERT_KIT_API_SECRET')
4-
const CONVERT_KIT_API_KEY = getRequiredServerEnvVar('CONVERT_KIT_API_KEY')
3+
const KIT_API_SECRET = getRequiredServerEnvVar('KIT_API_SECRET')
4+
const KIT_API_KEY = getRequiredServerEnvVar('KIT_API_KEY')
55

6-
type ConvertKitSubscriber = {
6+
type KitSubscriber = {
77
id: number
88
first_name: string
99
email_address: string
@@ -12,37 +12,33 @@ type ConvertKitSubscriber = {
1212
fields: Record<string, string | null>
1313
}
1414

15-
type ConvertKitTag = {
15+
type KitTag = {
1616
id: string
1717
name: string
1818
created_at: string
1919
}
2020

21-
async function getConvertKitSubscriber(email: string) {
22-
const url = new URL('https://api.convertkit.com/v3/subscribers')
23-
url.searchParams.set('api_secret', CONVERT_KIT_API_SECRET)
21+
async function getKitSubscriber(email: string) {
22+
const url = new URL('https://api.kit.com/v3/subscribers')
23+
url.searchParams.set('api_secret', KIT_API_SECRET)
2424
url.searchParams.set('email_address', email)
2525

2626
const resp = await fetch(url.toString())
2727
const json = await resp.json()
2828
const { subscribers: [subscriber = { state: 'inactive' }] = [] } = json as {
29-
subscribers?: Array<ConvertKitSubscriber>
29+
subscribers?: Array<KitSubscriber>
3030
}
3131

3232
return subscriber.state === 'active' ? subscriber : null
3333
}
3434

35-
async function getConvertKitSubscriberTags(
36-
subscriberId: ConvertKitSubscriber['id'],
37-
) {
38-
const url = new URL(
39-
`https://api.convertkit.com/v3/subscribers/${subscriberId}/tags`,
40-
)
41-
url.searchParams.set('api_secret', CONVERT_KIT_API_SECRET)
35+
async function getKitSubscriberTags(subscriberId: KitSubscriber['id']) {
36+
const url = new URL(`https://api.kit.com/v3/subscribers/${subscriberId}/tags`)
37+
url.searchParams.set('api_secret', KIT_API_SECRET)
4238

4339
const resp = await fetch(url.toString())
4440
const json = (await resp.json()) as {
45-
tags: Array<ConvertKitTag>
41+
tags: Array<KitTag>
4642
}
4743
return json.tags
4844
}
@@ -54,14 +50,14 @@ async function ensureSubscriber({
5450
email: string
5551
firstName: string
5652
}) {
57-
let subscriber = await getConvertKitSubscriber(email)
53+
let subscriber = await getKitSubscriber(email)
5854
if (!subscriber) {
5955
// this is a basic form that doesn't really do anything. It's just a way to
6056
// get the users on the mailing list
6157
subscriber = await addSubscriberToForm({
6258
email,
6359
firstName,
64-
convertKitFormId: '2500372',
60+
KitFormId: '2500372',
6561
})
6662
}
6763

@@ -71,53 +67,53 @@ async function ensureSubscriber({
7167
async function addSubscriberToForm({
7268
email,
7369
firstName,
74-
convertKitFormId,
70+
KitFormId,
7571
}: {
7672
email: string
7773
firstName: string
78-
convertKitFormId: string
74+
KitFormId: string
7975
}) {
8076
const subscriberData = {
81-
api_key: CONVERT_KIT_API_KEY,
82-
api_secret: CONVERT_KIT_API_SECRET,
77+
api_key: KIT_API_KEY,
78+
api_secret: KIT_API_SECRET,
8379
first_name: firstName,
8480
email,
8581
}
8682

8783
// this is a basic form that doesn't really do anything. It's just a way to
8884
// get the users on the mailing list
8985
const response = await fetch(
90-
`https://api.convertkit.com/v3/forms/${convertKitFormId}/subscribe`,
86+
`https://api.kit.com/v3/forms/${KitFormId}/subscribe`,
9187
{
9288
method: 'POST',
9389
body: JSON.stringify(subscriberData),
9490
headers: { 'Content-Type': 'application/json' },
9591
},
9692
)
9793
const json = (await response.json()) as {
98-
subscription: { subscriber: ConvertKitSubscriber }
94+
subscription: { subscriber: KitSubscriber }
9995
}
10096
return json.subscription.subscriber
10197
}
10298

10399
async function addTagToSubscriber({
104100
email,
105101
firstName,
106-
convertKitTagId,
102+
kitTagId,
107103
}: {
108104
email: string
109105
firstName: string
110-
convertKitTagId: string
106+
kitTagId: string
111107
}) {
112108
await ensureSubscriber({ email, firstName })
113109
const subscriberData = {
114-
api_key: CONVERT_KIT_API_KEY,
115-
api_secret: CONVERT_KIT_API_SECRET,
110+
api_key: KIT_API_KEY,
111+
api_secret: KIT_API_SECRET,
116112
first_name: firstName,
117113
email,
118114
}
119115

120-
const subscribeUrl = `https://api.convertkit.com/v3/tags/${convertKitTagId}/subscribe`
116+
const subscribeUrl = `https://api.kit.com/v3/tags/${kitTagId}/subscribe`
121117
const response = await fetch(subscribeUrl, {
122118
method: 'POST',
123119
body: JSON.stringify(subscriberData),
@@ -126,7 +122,7 @@ async function addTagToSubscriber({
126122
},
127123
})
128124
const json = (await response.json()) as {
129-
subscription: { subscriber: ConvertKitSubscriber }
125+
subscription: { subscriber: KitSubscriber }
130126
}
131127
return json.subscription.subscriber
132128
}
@@ -140,12 +136,12 @@ async function tagKCDSiteSubscriber({
140136
firstName: string
141137
fields: Record<string, string>
142138
}) {
143-
const subscriber = await getConvertKitSubscriber(email)
139+
const subscriber = await getKitSubscriber(email)
144140
const kcdTagId = '2466369'
145141
const kcdSiteForm = '2393887'
146142
const subscriberData = {
147-
api_key: CONVERT_KIT_API_KEY,
148-
api_secret: CONVERT_KIT_API_SECRET,
143+
api_key: KIT_API_KEY,
144+
api_secret: KIT_API_SECRET,
149145
first_name: firstName,
150146
email,
151147
fields,
@@ -156,8 +152,8 @@ async function tagKCDSiteSubscriber({
156152
// tag to existing subscribers who have already confirmed.
157153
// This form auto-adds the tag to new subscribers
158154
const subscribeUrl = subscriber
159-
? `https://api.convertkit.com/v3/tags/${kcdTagId}/subscribe`
160-
: `https://api.convertkit.com/v3/forms/${kcdSiteForm}/subscribe`
155+
? `https://api.kit.com/v3/tags/${kcdTagId}/subscribe`
156+
: `https://api.kit.com/v3/forms/${kcdSiteForm}/subscribe`
161157
const updatedRes = await fetch(subscribeUrl, {
162158
method: 'POST',
163159
body: JSON.stringify(subscriberData),
@@ -166,14 +162,14 @@ async function tagKCDSiteSubscriber({
166162
},
167163
})
168164
const updatedJson = (await updatedRes.json()) as {
169-
subscription: { subscriber: ConvertKitSubscriber }
165+
subscription: { subscriber: KitSubscriber }
170166
}
171167
return updatedJson.subscription.subscriber
172168
}
173169

174170
export {
175-
getConvertKitSubscriber,
176-
getConvertKitSubscriberTags,
171+
getKitSubscriber,
172+
getKitSubscriberTags,
177173
tagKCDSiteSubscriber,
178174
addTagToSubscriber,
179175
addSubscriberToForm,

0 commit comments

Comments
 (0)