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

1"""Release slide data for version announcement emails. 

2 

3Python equivalent of frontend releaseSlides from versions.ts. 

4""" 

5 

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} 

76 

77 

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.""" 

82 

83 return RELEASE_SLIDES.get(version)