Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
53bb254
feat(kilo-pass): integrate Churnkey for cancel flow and payment recovery
iscekic Mar 31, 2026
6b61013
fix(kilopass): fall back to direct cancellation when Churnkey SDK fails
iscekic Apr 1, 2026
8f82365
refactor: remove isChurnkeyAvailable check since Churnkey is always c…
iscekic Apr 1, 2026
1ff03f9
fix: hide modal after summoning churnkey
iscekic Apr 1, 2026
50a8f3f
feat(db): add kilo_pass_pause_events table for tracking subscription …
iscekic Apr 1, 2026
fd104e1
feat(kilo-pass): add pause event DB operations and tests
iscekic Apr 1, 2026
c92b995
feat(kilo-pass): detect pause_collection transitions in subscription …
iscekic Apr 1, 2026
71a07ea
feat(kilo-pass): skip paused months in monthly streak calculation
iscekic Apr 1, 2026
b33ff70
fix: align issuance query limit with streak walk bound (24 → 36)
iscekic Apr 1, 2026
81e323b
feat(kilo-pass): yearly cron includes paused subs with 12-issuance cap
iscekic Apr 1, 2026
19c0a68
refactor(kilo-pass): rename resumeSubscription to resumeCancelledSubs…
iscekic Apr 1, 2026
b0a4bdf
feat(kilo-pass): add resumePausedSubscription mutation
iscekic Apr 1, 2026
aa9d32c
feat(kilo-pass): add resumesAt to state + update UI for pause/resume
iscekic Apr 1, 2026
0b7cc00
fix: remove unused import and fix non-null assertion lint error
iscekic Apr 1, 2026
6182ecc
fix(kilo-pass): update DB status to active when resuming paused subsc…
iscekic Apr 1, 2026
fb2fc39
fix(kilo-pass): add double-fire guard to resumePausedSubscription + f…
iscekic Apr 1, 2026
2da5717
fix(kilo-pass): set DB status to paused when pause_collection is set
iscekic Apr 1, 2026
178a094
fix(kilo-pass): derive paused status from open pause events instead o…
iscekic Apr 1, 2026
dfe13cc
refactor(kilo-pass): fetch pause_collection from Stripe API instead o…
iscekic Apr 1, 2026
304c938
fix(kilo-pass): use numeric comparison in getPausedMonthSet instead o…
iscekic Apr 2, 2026
abcbd6b
chore(db): remove our migration and restore main schema for merge
iscekic Apr 2, 2026
b0cd3aa
Merge remote-tracking branch 'origin/main' into feat/churnkey-integra…
iscekic Apr 2, 2026
329daf9
feat(db): re-add kilo_pass_pause_events table after merge
iscekic Apr 2, 2026
6bda445
revert: remove churnkey env vars from .env files
iscekic Apr 2, 2026
781164e
chore(db): remove our migration and restore main schema for merge
iscekic Apr 2, 2026
67c35db
Merge remote-tracking branch 'origin/main' into feat/churnkey-integra…
iscekic Apr 2, 2026
cbae24e
feat(db): re-add kilo_pass_pause_events table after merge
iscekic Apr 2, 2026
d184abe
fix(bot): resolve merge conflict markers in spawn-cloud-agent-session
iscekic Apr 2, 2026
ade4021
Revert "fix(bot): resolve merge conflict markers in spawn-cloud-agent…
iscekic Apr 2, 2026
76ef0f1
Merge branch 'main' into feat/churnkey-integration
iscekic Apr 2, 2026
26c14f4
Merge branch 'main' into feat/churnkey-integration
iscekic Apr 2, 2026
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
14 changes: 14 additions & 0 deletions packages/db/src/migrations/0072_odd_shatterstar.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
CREATE TABLE "kilo_pass_pause_events" (
"id" uuid PRIMARY KEY DEFAULT pg_catalog.gen_random_uuid() NOT NULL,
"kilo_pass_subscription_id" uuid NOT NULL,
"paused_at" timestamp with time zone NOT NULL,
"resumes_at" timestamp with time zone,
"resumed_at" timestamp with time zone,
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
"updated_at" timestamp with time zone DEFAULT now() NOT NULL,
CONSTRAINT "kilo_pass_pause_events_resumed_at_after_paused_at_check" CHECK ("kilo_pass_pause_events"."resumed_at" IS NULL OR "kilo_pass_pause_events"."resumed_at" >= "kilo_pass_pause_events"."paused_at")
);
--> statement-breakpoint
ALTER TABLE "kilo_pass_pause_events" ADD CONSTRAINT "kilo_pass_pause_events_kilo_pass_subscription_id_kilo_pass_subscriptions_id_fk" FOREIGN KEY ("kilo_pass_subscription_id") REFERENCES "public"."kilo_pass_subscriptions"("id") ON DELETE cascade ON UPDATE cascade;--> statement-breakpoint
CREATE INDEX "IDX_kilo_pass_pause_events_subscription_id" ON "kilo_pass_pause_events" USING btree ("kilo_pass_subscription_id");--> statement-breakpoint
CREATE UNIQUE INDEX "UQ_kilo_pass_pause_events_one_open_per_sub" ON "kilo_pass_pause_events" USING btree ("kilo_pass_subscription_id") WHERE "kilo_pass_pause_events"."resumed_at" IS NULL;
Loading
Loading