Coverage for backend / app / emails / release_data.py: 100%
3 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-03-17 21:34 +0000
« prev ^ index » next coverage.py v7.13.5, created at 2026-03-17 21:34 +0000
1"""Release slide data for version announcement emails.
3Python equivalent of frontend releaseSlides from versions.ts.
4"""
6RELEASE_SLIDES: dict[str, list[dict]] = {
7 "1.0.0": [
8 {
9 "title": "Job Application Tracking",
10 "description": "Create and manage detailed job application records from a centralised dashboard.",
11 },
12 {
13 "title": "Interview Scheduling",
14 "description": "Log interview dates, times, and types. Keep a clear timeline of your stages.",
15 },
16 {
17 "title": "Company & Contact Management",
18 "description": "Store company details and link contacts, emails, and LinkedIn profiles to applications.",
19 },
20 {
21 "title": "Application Status Monitoring",
22 "description": "Track applications through customisable statuses and monitor deadlines at a glance.",
23 },
24 {
25 "title": "Email Verification & Password Reset",
26 "description": "Secure your account with email verification and easy password resets.",
27 },
28 ],
29 "1.1.0": [
30 {
31 "title": "Job Scraping & Rating (Alpha)",
32 "description": "TOAST extracts job alert data from your emails and rates each job using AI.",
33 },
34 {
35 "title": "AI Job Rating",
36 "description": "Scraped jobs are automatically rated based on your qualifications.",
37 },
38 {
39 "title": "UI Improvements",
40 "description": "Better theme contrast, sorted select options, and company names in selects.",
41 },
42 {
43 "title": "Bug Fixes",
44 "description": "Fixed source aggregator display, modal refresh, and theme name updates.",
45 },
46 ],
47 "1.2.0": [
48 {
49 "title": "Job Scraping Filters",
50 "description": "Create rules to exclude unwanted jobs by company, title, or other parameters.",
51 },
52 {
53 "title": "Speculative Applications",
54 "description": "A dedicated page for tracking speculative and spontaneous applications.",
55 },
56 {
57 "title": "Follow-Up Email Generator",
58 "description": "Right-click a job to generate a personalised follow-up email to its contacts.",
59 },
60 {
61 "title": "JAM Premium",
62 "description": "For only £5/month, JAM automatically scrapes job alert emails details, "
63 "rates them against your qualifications, and highlights the best matches for you. "
64 "New users get a 14-day free trial.",
65 },
66 {
67 "title": "Dark Mode & UI Refresh",
68 "description": "Dark mode, reworked settings page, editable badges, and account deletion.",
69 },
70 {
71 "title": "Quality of Life Improvements",
72 "description": "Extended data export, new job source types, and improved error messages.",
73 },
74 ],
75}
78def get_release_slides(version: str) -> list[dict] | None:
79 """Get the release slides for a given version.
80 :param version: The version string (e.g. "1.2.0")
81 :returns: List of feature dicts, or None if version not found."""
83 return RELEASE_SLIDES.get(version)