File size: 8,075 Bytes
c09f67c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
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
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
// Import apps from the app-store package (source of truth)
import { apps as appStoreApps } from "@midday/app-store";

export interface WebsiteApp {
  id: string;
  name: string;
  slug: string;
  category: string;
  active: boolean;
  beta?: boolean;
  short_description: string;
  description: string | null;
  features: string[];
  installUrl?: string;
}

// Website-specific extensions for each app (features and slugs only)
const appExtensions: Record<
  string,
  { slug: string; features: string[]; installUrl?: string }
> = {
  gmail: {
    slug: "gmail",
    features: [
      "Continuous inbox monitoring",
      "Automatic PDF extraction",
      "Smart transaction matching",
      "Secure OAuth authentication",
    ],
  },
  outlook: {
    slug: "outlook",
    features: [
      "Continuous inbox monitoring",
      "Automatic PDF extraction",
      "Smart transaction matching",
      "Secure OAuth authentication",
    ],
  },
  slack: {
    slug: "slack",
    features: [
      "Real-time transaction notifications",
      "Direct receipt upload from Slack",
      "Smart document matching",
      "One-click approve or decline",
    ],
  },
  whatsapp: {
    slug: "whatsapp",
    features: [
      "QR code setup - no app needed",
      "Forward receipts on the go",
      "Smart document matching",
      "One-tap approve or decline",
    ],
  },
  xero: {
    slug: "xero",
    features: [
      "Manual transaction export",
      "Receipt & invoice attachments",
      "Smart categorization mapping",
      "Faster book closing",
    ],
  },
  quickbooks: {
    slug: "quickbooks",
    features: [
      "Export as purchases and sales receipts",
      "Automatic document attachment",
      "Smart account mapping",
      "Efficient bookkeeping",
    ],
  },
  fortnox: {
    slug: "fortnox",
    features: [
      "Export transactions as vouchers",
      "Automatic attachments",
      "Swedish BAS account mapping",
      "Compliance-ready exports",
    ],
  },
  raycast: {
    slug: "raycast",
    features: [
      "Start/stop timers instantly",
      "Project selection",
      "Create new projects",
      "Keyboard-first workflow",
    ],
  },
  "stripe-payments": {
    slug: "stripe-payments",
    features: [
      "Accept credit cards on invoices",
      "Apple Pay & Google Pay support",
      "Automatic status updates",
      "Secure Stripe processing",
    ],
  },
  stripe: {
    slug: "stripe",
    features: [
      "Sync payments automatically",
      "Revenue data import",
      "Transaction matching",
      "Real-time updates",
    ],
  },
  "midday-desktop": {
    slug: "midday-desktop",
    features: [
      "One-click access to finances",
      "Track time from menu bar",
      "Manage invoices",
      "Native Mac experience",
    ],
    installUrl: "https://midday.ai/download",
  },
  "google-drive": {
    slug: "google-drive",
    features: [
      "Automatic file sync",
      "Document organization",
      "Seamless backup",
      "Easy file access",
    ],
  },
  dropbox: {
    slug: "dropbox",
    features: [
      "Automatic file sync",
      "Document organization",
      "Seamless backup",
      "Easy file access",
    ],
  },
  polar: {
    slug: "polar",
    features: [
      "Sync subscription payments",
      "Revenue tracking",
      "Customer insights",
      "Automated reconciliation",
    ],
  },
  deel: {
    slug: "deel",
    features: [
      "Sync contractor payments",
      "Payroll integration",
      "Compliance tracking",
      "Global workforce support",
    ],
  },
  "e-invoice": {
    slug: "e-invoice",
    features: [
      "Peppol network support",
      "European compliance",
      "Send & receive e-invoices",
      "Automated processing",
    ],
  },
  "cursor-mcp": {
    slug: "cursor-mcp",
    features: [
      "Financial context in your editor",
      "Query transactions while coding",
      "One-click install via deeplink",
      "27 tools for financial data",
    ],
    installUrl: "https://midday.ai/mcp/cursor",
  },
  "claude-mcp": {
    slug: "claude-mcp",
    features: [
      "Conversations with real numbers",
      "Works with Claude Code & Desktop",
      "Query invoices and reports",
      "Granular permission controls",
    ],
    installUrl: "https://midday.ai/mcp/claude",
  },
  "perplexity-mcp": {
    slug: "perplexity-mcp",
    features: [
      "AI search with your real data",
      "Works with Perplexity Mac app",
      "Query transactions and reports",
      "Natural language questions",
    ],
    installUrl: "https://midday.ai/mcp/perplexity",
  },
  "raycast-mcp": {
    slug: "raycast-mcp",
    features: [
      "Financial tools at your fingertips",
      "Keyboard-first access",
      "One-click install via deeplink",
      "@-mention in Raycast AI",
    ],
    installUrl: "https://midday.ai/mcp/raycast",
  },
  "chatgpt-mcp": {
    slug: "chatgpt-mcp",
    features: [
      "Build with the MCP SDK",
      "Custom integrations",
      "Programmatic data access",
      "TypeScript support",
    ],
    installUrl: "https://midday.ai/mcp/chatgpt",
  },
  "opencode-mcp": {
    slug: "opencode-mcp",
    features: [
      "Track time for clients while coding",
      "Start/stop timers from terminal",
      "Query finances from any editor",
      "Open source AI coding agent",
    ],
    installUrl: "https://midday.ai/mcp/opencode",
  },
  "zapier-mcp": {
    slug: "zapier-mcp",
    features: [
      "Connect to 7,000+ apps",
      "Automate reports and alerts",
      "No-code workflow builder",
      "Sync data across tools",
    ],
    installUrl: "https://midday.ai/mcp/zapier",
  },
  "copilot-mcp": {
    slug: "copilot-mcp",
    features: [
      "Query data from Microsoft 365",
      "Works with Word, Excel, Outlook",
      "Build custom Copilot agents",
      "Enterprise-ready integration",
    ],
    installUrl: "https://midday.ai/mcp/copilot",
  },
  "n8n-mcp": {
    slug: "n8n-mcp",
    features: [
      "Build automated financial workflows",
      "AI agents with Midday tools",
      "Connect to 400+ apps via n8n",
      "MCP Client & Server support",
    ],
    installUrl: "https://midday.ai/mcp/n8n",
  },
  "make-mcp": {
    slug: "make-mcp",
    features: [
      "Visual scenario builder",
      "Connect to 1,500+ apps",
      "MCP Client module support",
      "No-code workflow automation",
    ],
    installUrl: "https://midday.ai/mcp/make",
  },
};

// Merge app-store data with website extensions
export const apps: WebsiteApp[] = appStoreApps
  .map((app): WebsiteApp | null => {
    const extension = appExtensions[app.id];
    if (!extension) return null;

    const appWithCategory = app as {
      category?: string;
      beta?: boolean;
      installUrl?: string;
    };

    return {
      id: app.id,
      name: app.name,
      slug: extension.slug,
      category: appWithCategory.category || "Other",
      active: app.active,
      beta: appWithCategory.beta,
      short_description: app.short_description || "",
      description: app.description || null,
      features: extension.features,
      installUrl: extension.installUrl || appWithCategory.installUrl,
    };
  })
  .filter((app): app is WebsiteApp => app !== null);

export const categories = [
  { id: "all", name: "All" },
  { id: "capture", name: "Capture" },
  { id: "accounting", name: "Accounting" },
  { id: "payments", name: "Payments" },
  { id: "storage", name: "Storage" },
  { id: "apps", name: "Apps" },
  { id: "ai-automation", name: "AI & Automation" },
];

export function getAppBySlug(slug: string): WebsiteApp | undefined {
  return apps.find((app) => app.slug === slug);
}

export function getAppsByCategory(category: string): WebsiteApp[] {
  if (category === "all") return apps;
  return apps.filter((app) => app.category === category);
}

export function getCategoryName(categoryId: string): string {
  const category = categories.find((c) => c.id === categoryId);
  return category?.name || categoryId;
}

export function getAllSlugs(): string[] {
  return apps.map((app) => app.slug);
}