Commit fccc96d
Rebuild marketing calendar with Firestore backend, campaign previews, list view, and page consolidation
Replace localStorage-based calendar with full Firestore integration for the
marketing-campaigns collection. Campaigns (email + push) are now created,
edited, and deleted via BEM API with real-time Firestore reads.
Core changes:
- Firestore real-time subscriptions with range-based queries per view
- Recurring campaign support: virtual occurrence generation, pattern-based
scheduling (daily/weekly/monthly/quarterly/yearly), history record overlay
- Optimistic rendering: instant UI updates on drag-and-drop reschedule,
cached data reuse across view switches
- Campaign previews: Edit/Preview tabs in editor modal with markdown-it for
email preview and mobile device frame for push notification preview
- List view: 5th calendar view mode showing chronological campaign table
with date headers, type/status badges, and click-to-edit
- Campaign editor: type toggle (email/push), recurrence config, provider
checkboxes (SendGrid/Beehiiv), targeting (lists/segments/all), discount
code, test mode, UTM overrides, advanced settings
- Results modal: read-only view for sent/failed campaigns with retry option
- Page consolidation: deleted separate notification and newsletter admin
pages, simplified sidebar to single Calendar link under Marketing
- Create Campaign button in page header for quick access
New file: campaign-preview.js (markdown + push preview rendering module)
New dependency: markdown-it@^14.1.1 (dynamic import, code-split by webpack)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>1 parent dd16052 commit fccc96d
File tree
21 files changed
+2277
-1699
lines changed- src
- assets
- css/pages/admin/calendar
- js/pages/admin
- calendar
- notifications
- new
- defaults/dist
- _includes/admin/sections
- _layouts/blueprint/admin
- calendar
- newsletters
- notifications
- pages/admin
- newsletters
- notifications
21 files changed
+2277
-1699
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
131 | 131 | | |
132 | 132 | | |
133 | 133 | | |
| 134 | + | |
134 | 135 | | |
135 | 136 | | |
136 | 137 | | |
137 | | - | |
| 138 | + | |
138 | 139 | | |
139 | 140 | | |
140 | 141 | | |
| |||
143 | 144 | | |
144 | 145 | | |
145 | 146 | | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
146 | 209 | | |
147 | 210 | | |
148 | 211 | | |
| |||
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
| 3 | + | |
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| |||
95 | 95 | | |
96 | 96 | | |
97 | 97 | | |
| 98 | + | |
98 | 99 | | |
99 | 100 | | |
100 | 101 | | |
| |||
0 commit comments