diff --git a/.github/workflows/maven-build.yml b/.github/workflows/maven-build.yml
index 5275669a7..a813245a0 100644
--- a/.github/workflows/maven-build.yml
+++ b/.github/workflows/maven-build.yml
@@ -11,7 +11,7 @@ jobs:
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
- java: [11, 17, 21]
+ java: [17, 21]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
diff --git a/.github/workflows/maven-release.yml b/.github/workflows/maven-release.yml
index 066d82ad6..70af2378e 100644
--- a/.github/workflows/maven-release.yml
+++ b/.github/workflows/maven-release.yml
@@ -11,7 +11,7 @@ jobs:
- uses: actions/setup-java@v4
with:
distribution: 'temurin'
- java-version: 11
+ java-version: 17
cache: maven
- run: git config user.name 'Nya Ξlimu'
- run: git config user.email 'info@elimu.ai'
diff --git a/pom.xml b/pom.xml
index f8f698846..9fb8cf561 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,13 +7,13 @@
2.4.25-SNAPSHOT
- 11
+ 17
UTF-8
2.0.73
5.6.15.Final
- 10.0.21
- 5.3.18
- 5.6.2
+ 11.0.22
+ 6.0.0
+ 6.0.0
3.1.2
@@ -301,13 +301,6 @@
model-${model.version}
-
- commons-fileupload
- commons-fileupload
-
- 1.4
-
-
org.springframework
@@ -406,16 +399,11 @@
aspectjweaver
1.9.22.1
-
-
- javax.validation
- validation-api
- 2.0.1.Final
-
+
org.hibernate.validator
hibernate-validator
- 6.1.7.Final
+ 7.0.0.Final
@@ -499,15 +487,9 @@
${hibernate.version}
- javax.persistence
- javax.persistence-api
- 2.2
-
-
-
- javax.servlet
- jstl
- 1.2
+ jakarta.persistence
+ jakarta.persistence-api
+ 3.0.0
@@ -519,9 +501,9 @@
- javax.transaction
- jta
- 1.1
+ jakarta.transaction
+ jakarta.transaction-api
+ 2.0.0
org.hsqldb
@@ -539,17 +521,23 @@
1.4
+
+ jakarta.servlet.jsp.jstl
+ jakarta.servlet.jsp.jstl-api
+ 2.0.0
+
+
- javax.servlet
- javax.servlet-api
- 4.0.1
+ jakarta.servlet
+ jakarta.servlet-api
+ 5.0.0
provided
- javax.servlet.jsp
- javax.servlet.jsp-api
- 2.3.3
+ jakarta.servlet.jsp
+ jakarta.servlet.jsp-api
+ 3.0.0
provided
diff --git a/src/main/config/DEPLOY.md b/src/main/config/DEPLOY.md
index d1671272c..a5dc677ce 100644
--- a/src/main/config/DEPLOY.md
+++ b/src/main/config/DEPLOY.md
@@ -13,7 +13,7 @@ Version: `CentOS 9 Stream`
## Java Virtual Machine (JVM) ☕
-Install Java 11 or newer. We will be using [OpenJDK](https://openjdk.org/), but you can also use the JDK from [Oracle](https://www.oracle.com/java/).
+Install Java 17 or newer. We will be using [OpenJDK](https://openjdk.org/), but you can also use the JDK from [Oracle](https://www.oracle.com/java/).
Version: `17`
diff --git a/src/main/java/ai/elimu/dao/jpa/ApplicationDaoJpa.java b/src/main/java/ai/elimu/dao/jpa/ApplicationDaoJpa.java
index 2f42f5e80..a201539c0 100644
--- a/src/main/java/ai/elimu/dao/jpa/ApplicationDaoJpa.java
+++ b/src/main/java/ai/elimu/dao/jpa/ApplicationDaoJpa.java
@@ -1,7 +1,7 @@
package ai.elimu.dao.jpa;
import java.util.List;
-import javax.persistence.NoResultException;
+import jakarta.persistence.NoResultException;
import ai.elimu.dao.ApplicationDao;
import ai.elimu.model.admin.Application;
diff --git a/src/main/java/ai/elimu/dao/jpa/ApplicationVersionDaoJpa.java b/src/main/java/ai/elimu/dao/jpa/ApplicationVersionDaoJpa.java
index 5e9a48b57..8b3820b25 100644
--- a/src/main/java/ai/elimu/dao/jpa/ApplicationVersionDaoJpa.java
+++ b/src/main/java/ai/elimu/dao/jpa/ApplicationVersionDaoJpa.java
@@ -1,7 +1,7 @@
package ai.elimu.dao.jpa;
import java.util.List;
-import javax.persistence.NoResultException;
+import jakarta.persistence.NoResultException;
import ai.elimu.dao.ApplicationVersionDao;
import ai.elimu.model.admin.Application;
import ai.elimu.model.admin.ApplicationVersion;
diff --git a/src/main/java/ai/elimu/dao/jpa/AudioDaoJpa.java b/src/main/java/ai/elimu/dao/jpa/AudioDaoJpa.java
index 7cf3ef27f..3865056c3 100644
--- a/src/main/java/ai/elimu/dao/jpa/AudioDaoJpa.java
+++ b/src/main/java/ai/elimu/dao/jpa/AudioDaoJpa.java
@@ -2,7 +2,7 @@
import java.util.List;
-import javax.persistence.NoResultException;
+import jakarta.persistence.NoResultException;
import ai.elimu.dao.AudioDao;
import ai.elimu.model.content.StoryBookParagraph;
import ai.elimu.model.content.Word;
diff --git a/src/main/java/ai/elimu/dao/jpa/AudioPeerReviewEventDaoJpa.java b/src/main/java/ai/elimu/dao/jpa/AudioPeerReviewEventDaoJpa.java
index de9208b4a..b69fcd033 100644
--- a/src/main/java/ai/elimu/dao/jpa/AudioPeerReviewEventDaoJpa.java
+++ b/src/main/java/ai/elimu/dao/jpa/AudioPeerReviewEventDaoJpa.java
@@ -6,7 +6,7 @@
import ai.elimu.model.contributor.AudioPeerReviewEvent;
import ai.elimu.model.contributor.Contributor;
import java.util.List;
-import javax.persistence.NoResultException;
+import jakarta.persistence.NoResultException;
import org.springframework.dao.DataAccessException;
public class AudioPeerReviewEventDaoJpa extends GenericDaoJpa implements AudioPeerReviewEventDao {
diff --git a/src/main/java/ai/elimu/dao/jpa/ContributorDaoJpa.java b/src/main/java/ai/elimu/dao/jpa/ContributorDaoJpa.java
index 098249a03..0b43d5f69 100644
--- a/src/main/java/ai/elimu/dao/jpa/ContributorDaoJpa.java
+++ b/src/main/java/ai/elimu/dao/jpa/ContributorDaoJpa.java
@@ -2,7 +2,7 @@
import java.util.Calendar;
import java.util.List;
-import javax.persistence.NoResultException;
+import jakarta.persistence.NoResultException;
import ai.elimu.dao.ContributorDao;
import org.springframework.dao.DataAccessException;
diff --git a/src/main/java/ai/elimu/dao/jpa/DbMigrationDaoJpa.java b/src/main/java/ai/elimu/dao/jpa/DbMigrationDaoJpa.java
index 26f28efb0..2d23b7c91 100644
--- a/src/main/java/ai/elimu/dao/jpa/DbMigrationDaoJpa.java
+++ b/src/main/java/ai/elimu/dao/jpa/DbMigrationDaoJpa.java
@@ -1,7 +1,7 @@
package ai.elimu.dao.jpa;
import java.util.List;
-import javax.persistence.NoResultException;
+import jakarta.persistence.NoResultException;
import ai.elimu.dao.DbMigrationDao;
import org.springframework.dao.DataAccessException;
diff --git a/src/main/java/ai/elimu/dao/jpa/DeviceDaoJpa.java b/src/main/java/ai/elimu/dao/jpa/DeviceDaoJpa.java
index 24974ec5d..b8f7e28af 100644
--- a/src/main/java/ai/elimu/dao/jpa/DeviceDaoJpa.java
+++ b/src/main/java/ai/elimu/dao/jpa/DeviceDaoJpa.java
@@ -1,6 +1,6 @@
package ai.elimu.dao.jpa;
-import javax.persistence.NoResultException;
+import jakarta.persistence.NoResultException;
import ai.elimu.dao.DeviceDao;
import org.springframework.dao.DataAccessException;
diff --git a/src/main/java/ai/elimu/dao/jpa/EmojiDaoJpa.java b/src/main/java/ai/elimu/dao/jpa/EmojiDaoJpa.java
index be58c4aca..57cf62acb 100644
--- a/src/main/java/ai/elimu/dao/jpa/EmojiDaoJpa.java
+++ b/src/main/java/ai/elimu/dao/jpa/EmojiDaoJpa.java
@@ -1,7 +1,7 @@
package ai.elimu.dao.jpa;
import java.util.List;
-import javax.persistence.NoResultException;
+import jakarta.persistence.NoResultException;
import ai.elimu.dao.EmojiDao;
import org.springframework.dao.DataAccessException;
diff --git a/src/main/java/ai/elimu/dao/jpa/GenericDaoJpa.java b/src/main/java/ai/elimu/dao/jpa/GenericDaoJpa.java
index 9f83fb950..ef908c64d 100644
--- a/src/main/java/ai/elimu/dao/jpa/GenericDaoJpa.java
+++ b/src/main/java/ai/elimu/dao/jpa/GenericDaoJpa.java
@@ -4,8 +4,8 @@
import java.lang.reflect.Type;
import java.util.List;
-import javax.persistence.EntityManager;
-import javax.persistence.PersistenceContext;
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.PersistenceContext;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Repository;
diff --git a/src/main/java/ai/elimu/dao/jpa/ImageDaoJpa.java b/src/main/java/ai/elimu/dao/jpa/ImageDaoJpa.java
index 8c3a5cba7..25a8eb811 100644
--- a/src/main/java/ai/elimu/dao/jpa/ImageDaoJpa.java
+++ b/src/main/java/ai/elimu/dao/jpa/ImageDaoJpa.java
@@ -2,7 +2,7 @@
import java.util.List;
-import javax.persistence.NoResultException;
+import jakarta.persistence.NoResultException;
import org.springframework.dao.DataAccessException;
diff --git a/src/main/java/ai/elimu/dao/jpa/LetterDaoJpa.java b/src/main/java/ai/elimu/dao/jpa/LetterDaoJpa.java
index db391ef9e..c27f60ca6 100644
--- a/src/main/java/ai/elimu/dao/jpa/LetterDaoJpa.java
+++ b/src/main/java/ai/elimu/dao/jpa/LetterDaoJpa.java
@@ -1,7 +1,7 @@
package ai.elimu.dao.jpa;
import java.util.List;
-import javax.persistence.NoResultException;
+import jakarta.persistence.NoResultException;
import ai.elimu.dao.LetterDao;
import org.springframework.dao.DataAccessException;
diff --git a/src/main/java/ai/elimu/dao/jpa/LetterLearningEventDaoJpa.java b/src/main/java/ai/elimu/dao/jpa/LetterLearningEventDaoJpa.java
index f26ff2b27..8b89e9edd 100644
--- a/src/main/java/ai/elimu/dao/jpa/LetterLearningEventDaoJpa.java
+++ b/src/main/java/ai/elimu/dao/jpa/LetterLearningEventDaoJpa.java
@@ -5,7 +5,7 @@
import ai.elimu.model.analytics.LetterLearningEvent;
import ai.elimu.model.content.Letter;
import java.util.Calendar;
-import javax.persistence.NoResultException;
+import jakarta.persistence.NoResultException;
import org.springframework.dao.DataAccessException;
public class LetterLearningEventDaoJpa extends GenericDaoJpa implements LetterLearningEventDao {
diff --git a/src/main/java/ai/elimu/dao/jpa/NumberDaoJpa.java b/src/main/java/ai/elimu/dao/jpa/NumberDaoJpa.java
index efca11db8..7a401c9f3 100644
--- a/src/main/java/ai/elimu/dao/jpa/NumberDaoJpa.java
+++ b/src/main/java/ai/elimu/dao/jpa/NumberDaoJpa.java
@@ -1,7 +1,7 @@
package ai.elimu.dao.jpa;
import java.util.List;
-import javax.persistence.NoResultException;
+import jakarta.persistence.NoResultException;
import org.springframework.dao.DataAccessException;
diff --git a/src/main/java/ai/elimu/dao/jpa/SoundDaoJpa.java b/src/main/java/ai/elimu/dao/jpa/SoundDaoJpa.java
index cbd7bb172..28abf04f2 100644
--- a/src/main/java/ai/elimu/dao/jpa/SoundDaoJpa.java
+++ b/src/main/java/ai/elimu/dao/jpa/SoundDaoJpa.java
@@ -1,7 +1,7 @@
package ai.elimu.dao.jpa;
import java.util.List;
-import javax.persistence.NoResultException;
+import jakarta.persistence.NoResultException;
import ai.elimu.model.content.Sound;
import org.springframework.dao.DataAccessException;
diff --git a/src/main/java/ai/elimu/dao/jpa/StoryBookDaoJpa.java b/src/main/java/ai/elimu/dao/jpa/StoryBookDaoJpa.java
index 96fd8d67b..e832bc842 100644
--- a/src/main/java/ai/elimu/dao/jpa/StoryBookDaoJpa.java
+++ b/src/main/java/ai/elimu/dao/jpa/StoryBookDaoJpa.java
@@ -1,7 +1,7 @@
package ai.elimu.dao.jpa;
import java.util.List;
-import javax.persistence.NoResultException;
+import jakarta.persistence.NoResultException;
import ai.elimu.dao.StoryBookDao;
import org.springframework.dao.DataAccessException;
diff --git a/src/main/java/ai/elimu/dao/jpa/StoryBookLearningEventDaoJpa.java b/src/main/java/ai/elimu/dao/jpa/StoryBookLearningEventDaoJpa.java
index 9729a2bcb..486e64783 100644
--- a/src/main/java/ai/elimu/dao/jpa/StoryBookLearningEventDaoJpa.java
+++ b/src/main/java/ai/elimu/dao/jpa/StoryBookLearningEventDaoJpa.java
@@ -6,7 +6,7 @@
import ai.elimu.model.content.StoryBook;
import java.util.Calendar;
import java.util.List;
-import javax.persistence.NoResultException;
+import jakarta.persistence.NoResultException;
import org.springframework.dao.DataAccessException;
public class StoryBookLearningEventDaoJpa extends GenericDaoJpa implements StoryBookLearningEventDao {
diff --git a/src/main/java/ai/elimu/dao/jpa/SyllableDaoJpa.java b/src/main/java/ai/elimu/dao/jpa/SyllableDaoJpa.java
index c3a72e4db..1d243fec9 100644
--- a/src/main/java/ai/elimu/dao/jpa/SyllableDaoJpa.java
+++ b/src/main/java/ai/elimu/dao/jpa/SyllableDaoJpa.java
@@ -1,7 +1,7 @@
package ai.elimu.dao.jpa;
import java.util.List;
-import javax.persistence.NoResultException;
+import jakarta.persistence.NoResultException;
import ai.elimu.dao.SyllableDao;
import org.springframework.dao.DataAccessException;
diff --git a/src/main/java/ai/elimu/dao/jpa/VideoDaoJpa.java b/src/main/java/ai/elimu/dao/jpa/VideoDaoJpa.java
index 1d0f7cf64..ac738fe50 100644
--- a/src/main/java/ai/elimu/dao/jpa/VideoDaoJpa.java
+++ b/src/main/java/ai/elimu/dao/jpa/VideoDaoJpa.java
@@ -2,7 +2,7 @@
import java.util.List;
-import javax.persistence.NoResultException;
+import jakarta.persistence.NoResultException;
import ai.elimu.dao.VideoDao;
import org.springframework.dao.DataAccessException;
diff --git a/src/main/java/ai/elimu/dao/jpa/WordDaoJpa.java b/src/main/java/ai/elimu/dao/jpa/WordDaoJpa.java
index 23065df71..68eb036c2 100644
--- a/src/main/java/ai/elimu/dao/jpa/WordDaoJpa.java
+++ b/src/main/java/ai/elimu/dao/jpa/WordDaoJpa.java
@@ -1,8 +1,8 @@
package ai.elimu.dao.jpa;
import java.util.List;
-import javax.persistence.NoResultException;
-import javax.persistence.Query;
+import jakarta.persistence.NoResultException;
+import jakarta.persistence.Query;
import ai.elimu.model.v2.enums.content.WordType;
import org.springframework.dao.DataAccessException;
diff --git a/src/main/java/ai/elimu/dao/jpa/WordLearningEventDaoJpa.java b/src/main/java/ai/elimu/dao/jpa/WordLearningEventDaoJpa.java
index 96f47db59..3ab64327f 100644
--- a/src/main/java/ai/elimu/dao/jpa/WordLearningEventDaoJpa.java
+++ b/src/main/java/ai/elimu/dao/jpa/WordLearningEventDaoJpa.java
@@ -5,7 +5,7 @@
import ai.elimu.model.analytics.WordLearningEvent;
import ai.elimu.model.content.Word;
import java.util.Calendar;
-import javax.persistence.NoResultException;
+import jakarta.persistence.NoResultException;
import org.springframework.dao.DataAccessException;
public class WordLearningEventDaoJpa extends GenericDaoJpa implements WordLearningEventDao {
diff --git a/src/main/java/ai/elimu/model/BaseEntity.java b/src/main/java/ai/elimu/model/BaseEntity.java
index 437a55a89..c7cb72105 100644
--- a/src/main/java/ai/elimu/model/BaseEntity.java
+++ b/src/main/java/ai/elimu/model/BaseEntity.java
@@ -1,10 +1,10 @@
package ai.elimu.model;
import java.io.Serializable;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.MappedSuperclass;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.persistence.MappedSuperclass;
@MappedSuperclass
public abstract class BaseEntity implements Serializable {
diff --git a/src/main/java/ai/elimu/model/DbMigration.java b/src/main/java/ai/elimu/model/DbMigration.java
index 69cdd7f55..b632f3abc 100644
--- a/src/main/java/ai/elimu/model/DbMigration.java
+++ b/src/main/java/ai/elimu/model/DbMigration.java
@@ -1,11 +1,11 @@
package ai.elimu.model;
import java.util.Calendar;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Temporal;
-import javax.persistence.TemporalType;
-import javax.validation.constraints.NotNull;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Temporal;
+import jakarta.persistence.TemporalType;
+import jakarta.validation.constraints.NotNull;
@Entity
public class DbMigration extends BaseEntity {
diff --git a/src/main/java/ai/elimu/model/Device.java b/src/main/java/ai/elimu/model/Device.java
index 30450cb38..eccfd5996 100644
--- a/src/main/java/ai/elimu/model/Device.java
+++ b/src/main/java/ai/elimu/model/Device.java
@@ -1,11 +1,11 @@
package ai.elimu.model;
import java.util.Calendar;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Temporal;
-import javax.persistence.TemporalType;
-import javax.validation.constraints.NotNull;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Temporal;
+import jakarta.persistence.TemporalType;
+import jakarta.validation.constraints.NotNull;
@Entity
public class Device extends BaseEntity {
diff --git a/src/main/java/ai/elimu/model/admin/Application.java b/src/main/java/ai/elimu/model/admin/Application.java
index 36b59002a..563966779 100644
--- a/src/main/java/ai/elimu/model/admin/Application.java
+++ b/src/main/java/ai/elimu/model/admin/Application.java
@@ -1,13 +1,13 @@
package ai.elimu.model.admin;
import java.util.Set;
-import javax.persistence.ElementCollection;
-import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.FetchType;
-import javax.persistence.ManyToOne;
-import javax.validation.constraints.NotNull;
+import jakarta.persistence.ElementCollection;
+import jakarta.persistence.Entity;
+import jakarta.persistence.EnumType;
+import jakarta.persistence.Enumerated;
+import jakarta.persistence.FetchType;
+import jakarta.persistence.ManyToOne;
+import jakarta.validation.constraints.NotNull;
import ai.elimu.model.BaseEntity;
import ai.elimu.model.contributor.Contributor;
import ai.elimu.model.v2.enums.content.LiteracySkill;
diff --git a/src/main/java/ai/elimu/model/admin/ApplicationVersion.java b/src/main/java/ai/elimu/model/admin/ApplicationVersion.java
index 51591c41a..178741937 100644
--- a/src/main/java/ai/elimu/model/admin/ApplicationVersion.java
+++ b/src/main/java/ai/elimu/model/admin/ApplicationVersion.java
@@ -1,13 +1,13 @@
package ai.elimu.model.admin;
import java.util.Calendar;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Lob;
-import javax.persistence.ManyToOne;
-import javax.persistence.Temporal;
-import javax.persistence.TemporalType;
-import javax.validation.constraints.NotNull;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Lob;
+import jakarta.persistence.ManyToOne;
+import jakarta.persistence.Temporal;
+import jakarta.persistence.TemporalType;
+import jakarta.validation.constraints.NotNull;
import ai.elimu.model.BaseEntity;
import ai.elimu.model.contributor.Contributor;
diff --git a/src/main/java/ai/elimu/model/analytics/LearningEvent.java b/src/main/java/ai/elimu/model/analytics/LearningEvent.java
index a07ef64c8..8ea4fcb22 100644
--- a/src/main/java/ai/elimu/model/analytics/LearningEvent.java
+++ b/src/main/java/ai/elimu/model/analytics/LearningEvent.java
@@ -4,13 +4,13 @@
import ai.elimu.model.admin.Application;
import ai.elimu.model.v2.enums.analytics.LearningEventType;
import java.util.Calendar;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.ManyToOne;
-import javax.persistence.MappedSuperclass;
-import javax.persistence.Temporal;
-import javax.persistence.TemporalType;
-import javax.validation.constraints.NotNull;
+import jakarta.persistence.EnumType;
+import jakarta.persistence.Enumerated;
+import jakarta.persistence.ManyToOne;
+import jakarta.persistence.MappedSuperclass;
+import jakarta.persistence.Temporal;
+import jakarta.persistence.TemporalType;
+import jakarta.validation.constraints.NotNull;
@MappedSuperclass
public abstract class LearningEvent extends BaseEntity {
diff --git a/src/main/java/ai/elimu/model/analytics/LetterLearningEvent.java b/src/main/java/ai/elimu/model/analytics/LetterLearningEvent.java
index 7ce06e07f..9ecc55470 100644
--- a/src/main/java/ai/elimu/model/analytics/LetterLearningEvent.java
+++ b/src/main/java/ai/elimu/model/analytics/LetterLearningEvent.java
@@ -1,9 +1,9 @@
package ai.elimu.model.analytics;
import ai.elimu.model.content.Letter;
-import javax.persistence.Entity;
-import javax.persistence.ManyToOne;
-import javax.validation.constraints.NotNull;
+import jakarta.persistence.Entity;
+import jakarta.persistence.ManyToOne;
+import jakarta.validation.constraints.NotNull;
@Entity
public class LetterLearningEvent extends LearningEvent {
diff --git a/src/main/java/ai/elimu/model/analytics/StoryBookLearningEvent.java b/src/main/java/ai/elimu/model/analytics/StoryBookLearningEvent.java
index c6a6d00ca..196a54d9c 100644
--- a/src/main/java/ai/elimu/model/analytics/StoryBookLearningEvent.java
+++ b/src/main/java/ai/elimu/model/analytics/StoryBookLearningEvent.java
@@ -1,9 +1,9 @@
package ai.elimu.model.analytics;
import ai.elimu.model.content.StoryBook;
-import javax.persistence.Entity;
-import javax.persistence.ManyToOne;
-import javax.validation.constraints.NotNull;
+import jakarta.persistence.Entity;
+import jakarta.persistence.ManyToOne;
+import jakarta.validation.constraints.NotNull;
@Entity
public class StoryBookLearningEvent extends LearningEvent {
diff --git a/src/main/java/ai/elimu/model/analytics/WordLearningEvent.java b/src/main/java/ai/elimu/model/analytics/WordLearningEvent.java
index 8757b3332..a09f45e83 100644
--- a/src/main/java/ai/elimu/model/analytics/WordLearningEvent.java
+++ b/src/main/java/ai/elimu/model/analytics/WordLearningEvent.java
@@ -1,8 +1,8 @@
package ai.elimu.model.analytics;
import ai.elimu.model.content.Word;
-import javax.persistence.Entity;
-import javax.persistence.ManyToOne;
+import jakarta.persistence.Entity;
+import jakarta.persistence.ManyToOne;
@Entity
public class WordLearningEvent extends LearningEvent {
diff --git a/src/main/java/ai/elimu/model/content/Content.java b/src/main/java/ai/elimu/model/content/Content.java
index 0005d2b01..66df43126 100644
--- a/src/main/java/ai/elimu/model/content/Content.java
+++ b/src/main/java/ai/elimu/model/content/Content.java
@@ -1,12 +1,12 @@
package ai.elimu.model.content;
import java.util.Calendar;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.MappedSuperclass;
-import javax.persistence.Temporal;
-import javax.persistence.TemporalType;
-import javax.validation.constraints.NotNull;
+import jakarta.persistence.EnumType;
+import jakarta.persistence.Enumerated;
+import jakarta.persistence.MappedSuperclass;
+import jakarta.persistence.Temporal;
+import jakarta.persistence.TemporalType;
+import jakarta.validation.constraints.NotNull;
import ai.elimu.model.BaseEntity;
import ai.elimu.model.v2.enums.content.ContentStatus;
import ai.elimu.model.enums.PeerReviewStatus;
diff --git a/src/main/java/ai/elimu/model/content/Emoji.java b/src/main/java/ai/elimu/model/content/Emoji.java
index dd826de45..8dc62e5dc 100644
--- a/src/main/java/ai/elimu/model/content/Emoji.java
+++ b/src/main/java/ai/elimu/model/content/Emoji.java
@@ -1,13 +1,13 @@
package ai.elimu.model.content;
import java.util.Set;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.JoinColumn;
-import javax.persistence.JoinTable;
-import javax.persistence.ManyToMany;
-import javax.validation.constraints.NotNull;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.FetchType;
+import jakarta.persistence.JoinColumn;
+import jakarta.persistence.JoinTable;
+import jakarta.persistence.ManyToMany;
+import jakarta.validation.constraints.NotNull;
import org.hibernate.validator.constraints.Length;
@Entity
diff --git a/src/main/java/ai/elimu/model/content/Letter.java b/src/main/java/ai/elimu/model/content/Letter.java
index e89a2f70b..9ad355d40 100644
--- a/src/main/java/ai/elimu/model/content/Letter.java
+++ b/src/main/java/ai/elimu/model/content/Letter.java
@@ -1,8 +1,8 @@
package ai.elimu.model.content;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.validation.constraints.NotNull;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.validation.constraints.NotNull;
import org.hibernate.validator.constraints.Length;
@Entity
diff --git a/src/main/java/ai/elimu/model/content/LetterSound.java b/src/main/java/ai/elimu/model/content/LetterSound.java
index 068dddf34..2fec563fb 100644
--- a/src/main/java/ai/elimu/model/content/LetterSound.java
+++ b/src/main/java/ai/elimu/model/content/LetterSound.java
@@ -1,10 +1,10 @@
package ai.elimu.model.content;
import java.util.List;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.ManyToMany;
-import javax.persistence.OrderColumn;
+import jakarta.persistence.Entity;
+import jakarta.persistence.FetchType;
+import jakarta.persistence.ManyToMany;
+import jakarta.persistence.OrderColumn;
import org.hibernate.validator.constraints.NotEmpty;
/**
diff --git a/src/main/java/ai/elimu/model/content/Number.java b/src/main/java/ai/elimu/model/content/Number.java
index 9876f25e3..aefcb5beb 100644
--- a/src/main/java/ai/elimu/model/content/Number.java
+++ b/src/main/java/ai/elimu/model/content/Number.java
@@ -1,11 +1,11 @@
package ai.elimu.model.content;
import java.util.List;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.ManyToMany;
-import javax.persistence.OrderColumn;
-import javax.validation.constraints.NotNull;
+import jakarta.persistence.Entity;
+import jakarta.persistence.FetchType;
+import jakarta.persistence.ManyToMany;
+import jakarta.persistence.OrderColumn;
+import jakarta.validation.constraints.NotNull;
import org.hibernate.validator.constraints.NotEmpty;
@Entity
diff --git a/src/main/java/ai/elimu/model/content/Sound.java b/src/main/java/ai/elimu/model/content/Sound.java
index e1165a120..77f0aa49c 100644
--- a/src/main/java/ai/elimu/model/content/Sound.java
+++ b/src/main/java/ai/elimu/model/content/Sound.java
@@ -1,11 +1,11 @@
package ai.elimu.model.content;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.OneToOne;
-import javax.validation.constraints.NotNull;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.EnumType;
+import jakarta.persistence.Enumerated;
+import jakarta.persistence.OneToOne;
+import jakarta.validation.constraints.NotNull;
import org.hibernate.validator.constraints.Length;
import ai.elimu.model.content.multimedia.Audio;
import ai.elimu.model.v2.enums.content.sound.ConsonantPlace;
diff --git a/src/main/java/ai/elimu/model/content/StoryBook.java b/src/main/java/ai/elimu/model/content/StoryBook.java
index 8cbfc0cec..41aebb6aa 100644
--- a/src/main/java/ai/elimu/model/content/StoryBook.java
+++ b/src/main/java/ai/elimu/model/content/StoryBook.java
@@ -1,11 +1,11 @@
package ai.elimu.model.content;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.ManyToOne;
-import javax.validation.constraints.NotNull;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.EnumType;
+import jakarta.persistence.Enumerated;
+import jakarta.persistence.ManyToOne;
+import jakarta.validation.constraints.NotNull;
import org.hibernate.validator.constraints.Length;
import ai.elimu.model.content.multimedia.Image;
import ai.elimu.model.enums.ContentLicense;
diff --git a/src/main/java/ai/elimu/model/content/StoryBookChapter.java b/src/main/java/ai/elimu/model/content/StoryBookChapter.java
index 89d39ef88..58ea89fe9 100644
--- a/src/main/java/ai/elimu/model/content/StoryBookChapter.java
+++ b/src/main/java/ai/elimu/model/content/StoryBookChapter.java
@@ -1,10 +1,10 @@
package ai.elimu.model.content;
-import javax.persistence.Entity;
+import jakarta.persistence.Entity;
import ai.elimu.model.BaseEntity;
import ai.elimu.model.content.multimedia.Image;
-import javax.persistence.ManyToOne;
-import javax.validation.constraints.NotNull;
+import jakarta.persistence.ManyToOne;
+import jakarta.validation.constraints.NotNull;
@Entity
public class StoryBookChapter extends BaseEntity {
diff --git a/src/main/java/ai/elimu/model/content/StoryBookParagraph.java b/src/main/java/ai/elimu/model/content/StoryBookParagraph.java
index d9faff128..ca8df2a64 100644
--- a/src/main/java/ai/elimu/model/content/StoryBookParagraph.java
+++ b/src/main/java/ai/elimu/model/content/StoryBookParagraph.java
@@ -1,14 +1,14 @@
package ai.elimu.model.content;
-import javax.persistence.Entity;
+import jakarta.persistence.Entity;
import ai.elimu.model.BaseEntity;
import java.util.List;
-import javax.persistence.Column;
-import javax.persistence.FetchType;
-import javax.persistence.ManyToMany;
-import javax.persistence.ManyToOne;
-import javax.persistence.OrderColumn;
-import javax.validation.constraints.NotNull;
+import jakarta.persistence.Column;
+import jakarta.persistence.FetchType;
+import jakarta.persistence.ManyToMany;
+import jakarta.persistence.ManyToOne;
+import jakarta.persistence.OrderColumn;
+import jakarta.validation.constraints.NotNull;
@Entity
public class StoryBookParagraph extends BaseEntity {
diff --git a/src/main/java/ai/elimu/model/content/Syllable.java b/src/main/java/ai/elimu/model/content/Syllable.java
index b655ba1a6..49f4a9b50 100644
--- a/src/main/java/ai/elimu/model/content/Syllable.java
+++ b/src/main/java/ai/elimu/model/content/Syllable.java
@@ -1,11 +1,11 @@
package ai.elimu.model.content;
import java.util.List;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.ManyToMany;
-import javax.persistence.OrderColumn;
-import javax.validation.constraints.NotNull;
+import jakarta.persistence.Entity;
+import jakarta.persistence.FetchType;
+import jakarta.persistence.ManyToMany;
+import jakarta.persistence.OrderColumn;
+import jakarta.validation.constraints.NotNull;
@Entity
public class Syllable extends Content {
diff --git a/src/main/java/ai/elimu/model/content/Word.java b/src/main/java/ai/elimu/model/content/Word.java
index 0667a2ac0..f0a71262a 100644
--- a/src/main/java/ai/elimu/model/content/Word.java
+++ b/src/main/java/ai/elimu/model/content/Word.java
@@ -1,16 +1,16 @@
package ai.elimu.model.content;
import java.util.List;
-import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.FetchType;
-import javax.persistence.ManyToMany;
-import javax.persistence.OrderColumn;
-import javax.validation.constraints.NotNull;
+import jakarta.persistence.Entity;
+import jakarta.persistence.EnumType;
+import jakarta.persistence.Enumerated;
+import jakarta.persistence.FetchType;
+import jakarta.persistence.ManyToMany;
+import jakarta.persistence.OrderColumn;
+import jakarta.validation.constraints.NotNull;
import ai.elimu.model.v2.enums.content.SpellingConsistency;
import ai.elimu.model.v2.enums.content.WordType;
-import javax.persistence.ManyToOne;
+import jakarta.persistence.ManyToOne;
import org.hibernate.validator.constraints.NotEmpty;
@Entity
diff --git a/src/main/java/ai/elimu/model/content/multimedia/Audio.java b/src/main/java/ai/elimu/model/content/multimedia/Audio.java
index 283f6193e..e3b836722 100644
--- a/src/main/java/ai/elimu/model/content/multimedia/Audio.java
+++ b/src/main/java/ai/elimu/model/content/multimedia/Audio.java
@@ -2,14 +2,14 @@
import ai.elimu.model.content.StoryBookParagraph;
import ai.elimu.model.content.Word;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.Lob;
-import javax.validation.constraints.NotNull;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.EnumType;
+import jakarta.persistence.Enumerated;
+import jakarta.persistence.Lob;
+import jakarta.validation.constraints.NotNull;
import ai.elimu.model.v2.enums.content.AudioFormat;
-import javax.persistence.ManyToOne;
+import jakarta.persistence.ManyToOne;
@Entity
public class Audio extends Multimedia {
diff --git a/src/main/java/ai/elimu/model/content/multimedia/Image.java b/src/main/java/ai/elimu/model/content/multimedia/Image.java
index 9f3d5f3a8..45f3f9362 100644
--- a/src/main/java/ai/elimu/model/content/multimedia/Image.java
+++ b/src/main/java/ai/elimu/model/content/multimedia/Image.java
@@ -1,11 +1,11 @@
package ai.elimu.model.content.multimedia;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.Lob;
-import javax.validation.constraints.NotNull;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.EnumType;
+import jakarta.persistence.Enumerated;
+import jakarta.persistence.Lob;
+import jakarta.validation.constraints.NotNull;
import ai.elimu.model.v2.enums.content.ImageFormat;
@Entity
diff --git a/src/main/java/ai/elimu/model/content/multimedia/Multimedia.java b/src/main/java/ai/elimu/model/content/multimedia/Multimedia.java
index 8adc2d17c..80b8d688d 100644
--- a/src/main/java/ai/elimu/model/content/multimedia/Multimedia.java
+++ b/src/main/java/ai/elimu/model/content/multimedia/Multimedia.java
@@ -1,16 +1,16 @@
package ai.elimu.model.content.multimedia;
import java.util.Set;
-import javax.persistence.Column;
-import javax.persistence.ElementCollection;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.FetchType;
-import javax.persistence.JoinColumn;
-import javax.persistence.JoinTable;
-import javax.persistence.ManyToMany;
-import javax.persistence.MappedSuperclass;
-import javax.validation.constraints.NotNull;
+import jakarta.persistence.Column;
+import jakarta.persistence.ElementCollection;
+import jakarta.persistence.EnumType;
+import jakarta.persistence.Enumerated;
+import jakarta.persistence.FetchType;
+import jakarta.persistence.JoinColumn;
+import jakarta.persistence.JoinTable;
+import jakarta.persistence.ManyToMany;
+import jakarta.persistence.MappedSuperclass;
+import jakarta.validation.constraints.NotNull;
import org.hibernate.validator.constraints.Length;
import ai.elimu.model.content.Content;
import ai.elimu.model.content.Letter;
diff --git a/src/main/java/ai/elimu/model/content/multimedia/Video.java b/src/main/java/ai/elimu/model/content/multimedia/Video.java
index 3ed9c1517..acd2f9250 100644
--- a/src/main/java/ai/elimu/model/content/multimedia/Video.java
+++ b/src/main/java/ai/elimu/model/content/multimedia/Video.java
@@ -1,11 +1,11 @@
package ai.elimu.model.content.multimedia;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.Lob;
-import javax.validation.constraints.NotNull;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.EnumType;
+import jakarta.persistence.Enumerated;
+import jakarta.persistence.Lob;
+import jakarta.validation.constraints.NotNull;
import ai.elimu.model.v2.enums.content.VideoFormat;
@Entity
diff --git a/src/main/java/ai/elimu/model/contributor/AudioContributionEvent.java b/src/main/java/ai/elimu/model/contributor/AudioContributionEvent.java
index e60ea56b4..7152e7da4 100644
--- a/src/main/java/ai/elimu/model/contributor/AudioContributionEvent.java
+++ b/src/main/java/ai/elimu/model/contributor/AudioContributionEvent.java
@@ -1,8 +1,8 @@
package ai.elimu.model.contributor;
import ai.elimu.model.content.multimedia.Audio;
-import javax.persistence.*;
-import javax.validation.constraints.NotNull;
+import jakarta.persistence.*;
+import jakarta.validation.constraints.NotNull;
@Entity
public class AudioContributionEvent extends ContributionEvent {
diff --git a/src/main/java/ai/elimu/model/contributor/AudioPeerReviewEvent.java b/src/main/java/ai/elimu/model/contributor/AudioPeerReviewEvent.java
index 1c633f7e7..1e2ce2551 100644
--- a/src/main/java/ai/elimu/model/contributor/AudioPeerReviewEvent.java
+++ b/src/main/java/ai/elimu/model/contributor/AudioPeerReviewEvent.java
@@ -1,7 +1,7 @@
package ai.elimu.model.contributor;
-import javax.persistence.*;
-import javax.validation.constraints.NotNull;
+import jakarta.persistence.*;
+import jakarta.validation.constraints.NotNull;
/**
* An event where a {@link Contributor} peer-reviews a {@link Audio} which
diff --git a/src/main/java/ai/elimu/model/contributor/ContributionEvent.java b/src/main/java/ai/elimu/model/contributor/ContributionEvent.java
index 51b9f0813..5cb510e90 100644
--- a/src/main/java/ai/elimu/model/contributor/ContributionEvent.java
+++ b/src/main/java/ai/elimu/model/contributor/ContributionEvent.java
@@ -2,8 +2,8 @@
import ai.elimu.model.BaseEntity;
import java.util.Calendar;
-import javax.persistence.*;
-import javax.validation.constraints.NotNull;
+import jakarta.persistence.*;
+import jakarta.validation.constraints.NotNull;
/**
* Parent class for various types of content contribution events.
diff --git a/src/main/java/ai/elimu/model/contributor/Contributor.java b/src/main/java/ai/elimu/model/contributor/Contributor.java
index 02adebf14..461a9853c 100644
--- a/src/main/java/ai/elimu/model/contributor/Contributor.java
+++ b/src/main/java/ai/elimu/model/contributor/Contributor.java
@@ -3,15 +3,15 @@
import ai.elimu.model.BaseEntity;
import java.util.Calendar;
import java.util.Set;
-import javax.persistence.Column;
-import javax.persistence.ElementCollection;
-import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.FetchType;
-import javax.persistence.Temporal;
-import javax.persistence.TemporalType;
-import javax.validation.constraints.NotNull;
+import jakarta.persistence.Column;
+import jakarta.persistence.ElementCollection;
+import jakarta.persistence.Entity;
+import jakarta.persistence.EnumType;
+import jakarta.persistence.Enumerated;
+import jakarta.persistence.FetchType;
+import jakarta.persistence.Temporal;
+import jakarta.persistence.TemporalType;
+import jakarta.validation.constraints.NotNull;
import org.hibernate.validator.constraints.NotEmpty;
import ai.elimu.model.enums.Role;
diff --git a/src/main/java/ai/elimu/model/contributor/ImageContributionEvent.java b/src/main/java/ai/elimu/model/contributor/ImageContributionEvent.java
index adaf5e383..f1b1ab9c0 100644
--- a/src/main/java/ai/elimu/model/contributor/ImageContributionEvent.java
+++ b/src/main/java/ai/elimu/model/contributor/ImageContributionEvent.java
@@ -1,8 +1,8 @@
package ai.elimu.model.contributor;
import ai.elimu.model.content.multimedia.Image;
-import javax.persistence.*;
-import javax.validation.constraints.NotNull;
+import jakarta.persistence.*;
+import jakarta.validation.constraints.NotNull;
@Entity
public class ImageContributionEvent extends ContributionEvent {
diff --git a/src/main/java/ai/elimu/model/contributor/LetterContributionEvent.java b/src/main/java/ai/elimu/model/contributor/LetterContributionEvent.java
index 36c7300f5..85a57c308 100644
--- a/src/main/java/ai/elimu/model/contributor/LetterContributionEvent.java
+++ b/src/main/java/ai/elimu/model/contributor/LetterContributionEvent.java
@@ -1,9 +1,9 @@
package ai.elimu.model.contributor;
import ai.elimu.model.content.Letter;
-import javax.persistence.Entity;
-import javax.persistence.ManyToOne;
-import javax.validation.constraints.NotNull;
+import jakarta.persistence.Entity;
+import jakarta.persistence.ManyToOne;
+import jakarta.validation.constraints.NotNull;
@Entity
public class LetterContributionEvent extends ContributionEvent {
diff --git a/src/main/java/ai/elimu/model/contributor/LetterSoundContributionEvent.java b/src/main/java/ai/elimu/model/contributor/LetterSoundContributionEvent.java
index 4a5e65ab3..3bc7c7be7 100644
--- a/src/main/java/ai/elimu/model/contributor/LetterSoundContributionEvent.java
+++ b/src/main/java/ai/elimu/model/contributor/LetterSoundContributionEvent.java
@@ -1,9 +1,9 @@
package ai.elimu.model.contributor;
import ai.elimu.model.content.LetterSound;
-import javax.persistence.Entity;
-import javax.persistence.ManyToOne;
-import javax.validation.constraints.NotNull;
+import jakarta.persistence.Entity;
+import jakarta.persistence.ManyToOne;
+import jakarta.validation.constraints.NotNull;
@Entity
public class LetterSoundContributionEvent extends ContributionEvent {
diff --git a/src/main/java/ai/elimu/model/contributor/LetterSoundPeerReviewEvent.java b/src/main/java/ai/elimu/model/contributor/LetterSoundPeerReviewEvent.java
index da29fc2a6..112b2601d 100644
--- a/src/main/java/ai/elimu/model/contributor/LetterSoundPeerReviewEvent.java
+++ b/src/main/java/ai/elimu/model/contributor/LetterSoundPeerReviewEvent.java
@@ -1,7 +1,7 @@
package ai.elimu.model.contributor;
-import javax.persistence.*;
-import javax.validation.constraints.NotNull;
+import jakarta.persistence.*;
+import jakarta.validation.constraints.NotNull;
/**
* An event where a {@link Contributor} peer-reviews a {@link LetterSound} which
diff --git a/src/main/java/ai/elimu/model/contributor/NumberContributionEvent.java b/src/main/java/ai/elimu/model/contributor/NumberContributionEvent.java
index 1f39110c2..da4a1d6c2 100644
--- a/src/main/java/ai/elimu/model/contributor/NumberContributionEvent.java
+++ b/src/main/java/ai/elimu/model/contributor/NumberContributionEvent.java
@@ -1,8 +1,8 @@
package ai.elimu.model.contributor;
import ai.elimu.model.content.Number;
-import javax.persistence.*;
-import javax.validation.constraints.NotNull;
+import jakarta.persistence.*;
+import jakarta.validation.constraints.NotNull;
@Entity
public class NumberContributionEvent extends ContributionEvent {
diff --git a/src/main/java/ai/elimu/model/contributor/NumberPeerReviewEvent.java b/src/main/java/ai/elimu/model/contributor/NumberPeerReviewEvent.java
index 324c9a266..0f86afeca 100644
--- a/src/main/java/ai/elimu/model/contributor/NumberPeerReviewEvent.java
+++ b/src/main/java/ai/elimu/model/contributor/NumberPeerReviewEvent.java
@@ -1,7 +1,7 @@
package ai.elimu.model.contributor;
-import javax.persistence.*;
-import javax.validation.constraints.NotNull;
+import jakarta.persistence.*;
+import jakarta.validation.constraints.NotNull;
/**
* An event where a {@link Contributor} peer-reviews a {@link Number} which
diff --git a/src/main/java/ai/elimu/model/contributor/PeerReviewEvent.java b/src/main/java/ai/elimu/model/contributor/PeerReviewEvent.java
index eb518b8d0..b1246c070 100644
--- a/src/main/java/ai/elimu/model/contributor/PeerReviewEvent.java
+++ b/src/main/java/ai/elimu/model/contributor/PeerReviewEvent.java
@@ -2,12 +2,12 @@
import ai.elimu.model.BaseEntity;
import java.util.Calendar;
-import javax.persistence.Column;
-import javax.persistence.ManyToOne;
-import javax.persistence.MappedSuperclass;
-import javax.persistence.Temporal;
-import javax.persistence.TemporalType;
-import javax.validation.constraints.NotNull;
+import jakarta.persistence.Column;
+import jakarta.persistence.ManyToOne;
+import jakarta.persistence.MappedSuperclass;
+import jakarta.persistence.Temporal;
+import jakarta.persistence.TemporalType;
+import jakarta.validation.constraints.NotNull;
/**
* An event where a {@link Contributor} peer-reviews a {@link ContributionEvent} of another {@link Contributor}.
diff --git a/src/main/java/ai/elimu/model/contributor/SoundContributionEvent.java b/src/main/java/ai/elimu/model/contributor/SoundContributionEvent.java
index 83199795c..45a452162 100644
--- a/src/main/java/ai/elimu/model/contributor/SoundContributionEvent.java
+++ b/src/main/java/ai/elimu/model/contributor/SoundContributionEvent.java
@@ -1,9 +1,9 @@
package ai.elimu.model.contributor;
import ai.elimu.model.content.Sound;
-import javax.persistence.Entity;
-import javax.persistence.ManyToOne;
-import javax.validation.constraints.NotNull;
+import jakarta.persistence.Entity;
+import jakarta.persistence.ManyToOne;
+import jakarta.validation.constraints.NotNull;
@Entity
public class SoundContributionEvent extends ContributionEvent {
diff --git a/src/main/java/ai/elimu/model/contributor/StoryBookContributionEvent.java b/src/main/java/ai/elimu/model/contributor/StoryBookContributionEvent.java
index bed606b62..148cd9616 100644
--- a/src/main/java/ai/elimu/model/contributor/StoryBookContributionEvent.java
+++ b/src/main/java/ai/elimu/model/contributor/StoryBookContributionEvent.java
@@ -2,10 +2,10 @@
import ai.elimu.model.content.StoryBook;
import ai.elimu.model.content.StoryBookParagraph;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.ManyToOne;
-import javax.validation.constraints.NotNull;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.ManyToOne;
+import jakarta.validation.constraints.NotNull;
@Entity
public class StoryBookContributionEvent extends ContributionEvent {
diff --git a/src/main/java/ai/elimu/model/contributor/StoryBookPeerReviewEvent.java b/src/main/java/ai/elimu/model/contributor/StoryBookPeerReviewEvent.java
index 776afc835..bfcfc3ce3 100644
--- a/src/main/java/ai/elimu/model/contributor/StoryBookPeerReviewEvent.java
+++ b/src/main/java/ai/elimu/model/contributor/StoryBookPeerReviewEvent.java
@@ -1,8 +1,8 @@
package ai.elimu.model.contributor;
-import javax.persistence.Entity;
-import javax.persistence.ManyToOne;
-import javax.validation.constraints.NotNull;
+import jakarta.persistence.Entity;
+import jakarta.persistence.ManyToOne;
+import jakarta.validation.constraints.NotNull;
/**
* An event where a {@link Contributor} peer-reviews a {@link StoryBook} which
diff --git a/src/main/java/ai/elimu/model/contributor/WordContributionEvent.java b/src/main/java/ai/elimu/model/contributor/WordContributionEvent.java
index 049fad573..c17d882c6 100644
--- a/src/main/java/ai/elimu/model/contributor/WordContributionEvent.java
+++ b/src/main/java/ai/elimu/model/contributor/WordContributionEvent.java
@@ -1,9 +1,9 @@
package ai.elimu.model.contributor;
import ai.elimu.model.content.Word;
-import javax.persistence.Entity;
-import javax.persistence.ManyToOne;
-import javax.validation.constraints.NotNull;
+import jakarta.persistence.Entity;
+import jakarta.persistence.ManyToOne;
+import jakarta.validation.constraints.NotNull;
@Entity
public class WordContributionEvent extends ContributionEvent {
diff --git a/src/main/java/ai/elimu/model/contributor/WordPeerReviewEvent.java b/src/main/java/ai/elimu/model/contributor/WordPeerReviewEvent.java
index 505adb7e0..e5e5d6dbb 100644
--- a/src/main/java/ai/elimu/model/contributor/WordPeerReviewEvent.java
+++ b/src/main/java/ai/elimu/model/contributor/WordPeerReviewEvent.java
@@ -1,7 +1,7 @@
package ai.elimu.model.contributor;
-import javax.persistence.*;
-import javax.validation.constraints.NotNull;
+import jakarta.persistence.*;
+import jakarta.validation.constraints.NotNull;
/**
* An event where a {@link Contributor} peer-reviews a {@link Word} which
diff --git a/src/main/java/ai/elimu/rest/v2/analytics/LetterAssessmentEventsRestController.java b/src/main/java/ai/elimu/rest/v2/analytics/LetterAssessmentEventsRestController.java
index 73f1f9957..f861ecb66 100644
--- a/src/main/java/ai/elimu/rest/v2/analytics/LetterAssessmentEventsRestController.java
+++ b/src/main/java/ai/elimu/rest/v2/analytics/LetterAssessmentEventsRestController.java
@@ -11,7 +11,7 @@
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletResponse;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVParser;
import org.apache.commons.csv.CSVRecord;
diff --git a/src/main/java/ai/elimu/rest/v2/analytics/LetterLearningEventsRestController.java b/src/main/java/ai/elimu/rest/v2/analytics/LetterLearningEventsRestController.java
index a0e786dee..578f88744 100644
--- a/src/main/java/ai/elimu/rest/v2/analytics/LetterLearningEventsRestController.java
+++ b/src/main/java/ai/elimu/rest/v2/analytics/LetterLearningEventsRestController.java
@@ -17,7 +17,7 @@
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Calendar;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletResponse;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVParser;
import org.apache.commons.csv.CSVRecord;
diff --git a/src/main/java/ai/elimu/rest/v2/analytics/LetterSoundLearningEventsRestController.java b/src/main/java/ai/elimu/rest/v2/analytics/LetterSoundLearningEventsRestController.java
index 3a47e89cd..6630c8204 100644
--- a/src/main/java/ai/elimu/rest/v2/analytics/LetterSoundLearningEventsRestController.java
+++ b/src/main/java/ai/elimu/rest/v2/analytics/LetterSoundLearningEventsRestController.java
@@ -3,7 +3,7 @@
import java.io.File;
import java.io.IOException;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletResponse;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
diff --git a/src/main/java/ai/elimu/rest/v2/analytics/StoryBookLearningEventsRestController.java b/src/main/java/ai/elimu/rest/v2/analytics/StoryBookLearningEventsRestController.java
index 12c569176..1829f7485 100644
--- a/src/main/java/ai/elimu/rest/v2/analytics/StoryBookLearningEventsRestController.java
+++ b/src/main/java/ai/elimu/rest/v2/analytics/StoryBookLearningEventsRestController.java
@@ -17,7 +17,7 @@
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Calendar;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletResponse;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVParser;
import org.apache.commons.csv.CSVRecord;
diff --git a/src/main/java/ai/elimu/rest/v2/analytics/WordAssessmentEventsRestController.java b/src/main/java/ai/elimu/rest/v2/analytics/WordAssessmentEventsRestController.java
index 4b2ee7968..580e2b1d2 100644
--- a/src/main/java/ai/elimu/rest/v2/analytics/WordAssessmentEventsRestController.java
+++ b/src/main/java/ai/elimu/rest/v2/analytics/WordAssessmentEventsRestController.java
@@ -11,7 +11,7 @@
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletResponse;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVParser;
import org.apache.commons.csv.CSVRecord;
diff --git a/src/main/java/ai/elimu/rest/v2/analytics/WordLearningEventsRestController.java b/src/main/java/ai/elimu/rest/v2/analytics/WordLearningEventsRestController.java
index ed80e7b1f..63c070c68 100644
--- a/src/main/java/ai/elimu/rest/v2/analytics/WordLearningEventsRestController.java
+++ b/src/main/java/ai/elimu/rest/v2/analytics/WordLearningEventsRestController.java
@@ -17,7 +17,7 @@
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Calendar;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletResponse;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVParser;
import org.apache.commons.csv.CSVRecord;
diff --git a/src/main/java/ai/elimu/rest/v2/applications/ApplicationsRestController.java b/src/main/java/ai/elimu/rest/v2/applications/ApplicationsRestController.java
index f17029e5c..4ab4d72e9 100644
--- a/src/main/java/ai/elimu/rest/v2/applications/ApplicationsRestController.java
+++ b/src/main/java/ai/elimu/rest/v2/applications/ApplicationsRestController.java
@@ -10,7 +10,7 @@
import com.google.gson.Gson;
import java.util.ArrayList;
import java.util.List;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.json.JSONArray;
diff --git a/src/main/java/ai/elimu/rest/v2/content/AudiosRestController.java b/src/main/java/ai/elimu/rest/v2/content/AudiosRestController.java
index 05f6e1e95..bf7d8bf97 100644
--- a/src/main/java/ai/elimu/rest/v2/content/AudiosRestController.java
+++ b/src/main/java/ai/elimu/rest/v2/content/AudiosRestController.java
@@ -5,7 +5,7 @@
import ai.elimu.model.v2.gson.content.AudioGson;
import ai.elimu.rest.v2.JpaToGsonConverter;
import com.google.gson.Gson;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.json.JSONArray;
diff --git a/src/main/java/ai/elimu/rest/v2/content/EmojisRestController.java b/src/main/java/ai/elimu/rest/v2/content/EmojisRestController.java
index 5525a8b2c..1be12c60a 100644
--- a/src/main/java/ai/elimu/rest/v2/content/EmojisRestController.java
+++ b/src/main/java/ai/elimu/rest/v2/content/EmojisRestController.java
@@ -5,7 +5,7 @@
import ai.elimu.model.v2.gson.content.EmojiGson;
import ai.elimu.rest.v2.JpaToGsonConverter;
import com.google.gson.Gson;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.json.JSONArray;
diff --git a/src/main/java/ai/elimu/rest/v2/content/ImagesRestController.java b/src/main/java/ai/elimu/rest/v2/content/ImagesRestController.java
index 5bc5b3221..ef2dc1b3c 100644
--- a/src/main/java/ai/elimu/rest/v2/content/ImagesRestController.java
+++ b/src/main/java/ai/elimu/rest/v2/content/ImagesRestController.java
@@ -5,7 +5,7 @@
import ai.elimu.model.v2.gson.content.ImageGson;
import ai.elimu.rest.v2.JpaToGsonConverter;
import com.google.gson.Gson;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.json.JSONArray;
diff --git a/src/main/java/ai/elimu/rest/v2/content/VideosRestController.java b/src/main/java/ai/elimu/rest/v2/content/VideosRestController.java
index e98e608a1..0f2c4f49d 100644
--- a/src/main/java/ai/elimu/rest/v2/content/VideosRestController.java
+++ b/src/main/java/ai/elimu/rest/v2/content/VideosRestController.java
@@ -5,7 +5,7 @@
import ai.elimu.model.v2.gson.content.VideoGson;
import ai.elimu.rest.v2.JpaToGsonConverter;
import com.google.gson.Gson;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.json.JSONArray;
diff --git a/src/main/java/ai/elimu/web/SignOnController.java b/src/main/java/ai/elimu/web/SignOnController.java
index eb069cdc4..f864b5bce 100644
--- a/src/main/java/ai/elimu/web/SignOnController.java
+++ b/src/main/java/ai/elimu/web/SignOnController.java
@@ -3,7 +3,7 @@
import java.util.Arrays;
import java.util.Calendar;
import java.util.HashSet;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
import org.apache.logging.log4j.Logger;
import ai.elimu.dao.ContributorDao;
diff --git a/src/main/java/ai/elimu/web/SignOnControllerDiscord.java b/src/main/java/ai/elimu/web/SignOnControllerDiscord.java
index 98de350ce..fe11b1326 100644
--- a/src/main/java/ai/elimu/web/SignOnControllerDiscord.java
+++ b/src/main/java/ai/elimu/web/SignOnControllerDiscord.java
@@ -2,7 +2,7 @@
import java.io.IOException;
import java.util.Calendar;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
import org.apache.logging.log4j.Logger;
import org.json.JSONObject;
import ai.elimu.dao.ContributorDao;
diff --git a/src/main/java/ai/elimu/web/SignOnControllerGitHub.java b/src/main/java/ai/elimu/web/SignOnControllerGitHub.java
index 5ec6dd2c8..32fcca401 100644
--- a/src/main/java/ai/elimu/web/SignOnControllerGitHub.java
+++ b/src/main/java/ai/elimu/web/SignOnControllerGitHub.java
@@ -2,7 +2,7 @@
import java.io.IOException;
import java.util.Calendar;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
import org.apache.logging.log4j.Logger;
import org.json.JSONArray;
import org.json.JSONObject;
diff --git a/src/main/java/ai/elimu/web/SignOnControllerSelenium.java b/src/main/java/ai/elimu/web/SignOnControllerSelenium.java
index 1f2b8dab4..a67d1e903 100644
--- a/src/main/java/ai/elimu/web/SignOnControllerSelenium.java
+++ b/src/main/java/ai/elimu/web/SignOnControllerSelenium.java
@@ -4,7 +4,7 @@
import java.util.Calendar;
import java.util.HashSet;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
import org.apache.logging.log4j.Logger;
import ai.elimu.dao.ContributorDao;
diff --git a/src/main/java/ai/elimu/web/SignOnControllerWeb3.java b/src/main/java/ai/elimu/web/SignOnControllerWeb3.java
index 7ab7f7d1d..99f11f6f8 100644
--- a/src/main/java/ai/elimu/web/SignOnControllerWeb3.java
+++ b/src/main/java/ai/elimu/web/SignOnControllerWeb3.java
@@ -1,7 +1,7 @@
package ai.elimu.web;
import java.io.IOException;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
import org.apache.logging.log4j.Logger;
import ai.elimu.dao.ContributorDao;
import ai.elimu.model.contributor.Contributor;
@@ -10,7 +10,7 @@
import java.util.Arrays;
import java.util.Calendar;
import java.util.HashSet;
-import javax.servlet.http.HttpSession;
+import jakarta.servlet.http.HttpSession;
import org.apache.commons.lang.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/src/main/java/ai/elimu/web/admin/application/ApplicationCreateController.java b/src/main/java/ai/elimu/web/admin/application/ApplicationCreateController.java
index eb24e19c9..bb6a716df 100644
--- a/src/main/java/ai/elimu/web/admin/application/ApplicationCreateController.java
+++ b/src/main/java/ai/elimu/web/admin/application/ApplicationCreateController.java
@@ -1,7 +1,7 @@
package ai.elimu.web.admin.application;
-import javax.servlet.http.HttpSession;
-import javax.validation.Valid;
+import jakarta.servlet.http.HttpSession;
+import jakarta.validation.Valid;
import org.apache.logging.log4j.Logger;
import ai.elimu.dao.ApplicationDao;
diff --git a/src/main/java/ai/elimu/web/admin/application/ApplicationEditController.java b/src/main/java/ai/elimu/web/admin/application/ApplicationEditController.java
index 4f57db38f..c1917a782 100644
--- a/src/main/java/ai/elimu/web/admin/application/ApplicationEditController.java
+++ b/src/main/java/ai/elimu/web/admin/application/ApplicationEditController.java
@@ -1,8 +1,8 @@
package ai.elimu.web.admin.application;
import java.util.List;
-import javax.servlet.http.HttpSession;
-import javax.validation.Valid;
+import jakarta.servlet.http.HttpSession;
+import jakarta.validation.Valid;
import org.apache.logging.log4j.Logger;
import ai.elimu.dao.ApplicationDao;
import ai.elimu.dao.ApplicationVersionDao;
diff --git a/src/main/java/ai/elimu/web/admin/application_version/ApplicationVersionCreateController.java b/src/main/java/ai/elimu/web/admin/application_version/ApplicationVersionCreateController.java
index b36e629d1..278e985b6 100644
--- a/src/main/java/ai/elimu/web/admin/application_version/ApplicationVersionCreateController.java
+++ b/src/main/java/ai/elimu/web/admin/application_version/ApplicationVersionCreateController.java
@@ -3,9 +3,9 @@
import java.io.IOException;
import java.util.Calendar;
import java.util.List;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpSession;
import org.apache.logging.log4j.Logger;
import ai.elimu.dao.ApplicationDao;
diff --git a/src/main/java/ai/elimu/web/analytics/StoryBookLearningEventCsvExportController.java b/src/main/java/ai/elimu/web/analytics/StoryBookLearningEventCsvExportController.java
index 37e342d7e..870a2e345 100644
--- a/src/main/java/ai/elimu/web/analytics/StoryBookLearningEventCsvExportController.java
+++ b/src/main/java/ai/elimu/web/analytics/StoryBookLearningEventCsvExportController.java
@@ -14,7 +14,7 @@
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletResponse;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVPrinter;
import org.apache.logging.log4j.LogManager;
diff --git a/src/main/java/ai/elimu/web/content/MainContentController.java b/src/main/java/ai/elimu/web/content/MainContentController.java
index 8147a8de1..79c8dafbc 100644
--- a/src/main/java/ai/elimu/web/content/MainContentController.java
+++ b/src/main/java/ai/elimu/web/content/MainContentController.java
@@ -3,8 +3,8 @@
import ai.elimu.dao.AudioContributionEventDao;
import java.security.Principal;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpSession;
import org.apache.commons.lang.StringUtils;
import org.apache.logging.log4j.Logger;
diff --git a/src/main/java/ai/elimu/web/content/contributor/AddEmailController.java b/src/main/java/ai/elimu/web/content/contributor/AddEmailController.java
index 92cf3b48f..a1f1e5784 100644
--- a/src/main/java/ai/elimu/web/content/contributor/AddEmailController.java
+++ b/src/main/java/ai/elimu/web/content/contributor/AddEmailController.java
@@ -1,6 +1,6 @@
package ai.elimu.web.content.contributor;
-import javax.servlet.http.HttpSession;
+import jakarta.servlet.http.HttpSession;
import org.apache.commons.validator.EmailValidator;
import org.apache.logging.log4j.Logger;
diff --git a/src/main/java/ai/elimu/web/content/contributor/ContributorCsvExportController.java b/src/main/java/ai/elimu/web/content/contributor/ContributorCsvExportController.java
index 7f69ee84a..452caff13 100644
--- a/src/main/java/ai/elimu/web/content/contributor/ContributorCsvExportController.java
+++ b/src/main/java/ai/elimu/web/content/contributor/ContributorCsvExportController.java
@@ -21,7 +21,7 @@
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletResponse;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVPrinter;
import org.apache.logging.log4j.LogManager;
diff --git a/src/main/java/ai/elimu/web/content/contributor/EditMotivationController.java b/src/main/java/ai/elimu/web/content/contributor/EditMotivationController.java
index 02ec74ff1..64d78e9e1 100644
--- a/src/main/java/ai/elimu/web/content/contributor/EditMotivationController.java
+++ b/src/main/java/ai/elimu/web/content/contributor/EditMotivationController.java
@@ -1,7 +1,7 @@
package ai.elimu.web.content.contributor;
import java.util.Calendar;
-import javax.servlet.http.HttpSession;
+import jakarta.servlet.http.HttpSession;
import org.apache.commons.lang.StringUtils;
import org.apache.logging.log4j.Logger;
diff --git a/src/main/java/ai/elimu/web/content/contributor/EditNameController.java b/src/main/java/ai/elimu/web/content/contributor/EditNameController.java
index 5de368b86..f5cd236fc 100644
--- a/src/main/java/ai/elimu/web/content/contributor/EditNameController.java
+++ b/src/main/java/ai/elimu/web/content/contributor/EditNameController.java
@@ -1,6 +1,6 @@
package ai.elimu.web.content.contributor;
-import javax.servlet.http.HttpSession;
+import jakarta.servlet.http.HttpSession;
import org.apache.logging.log4j.Logger;
import ai.elimu.dao.ContributorDao;
diff --git a/src/main/java/ai/elimu/web/content/emoji/EmojiCreateController.java b/src/main/java/ai/elimu/web/content/emoji/EmojiCreateController.java
index eb84e84a7..93987ba87 100644
--- a/src/main/java/ai/elimu/web/content/emoji/EmojiCreateController.java
+++ b/src/main/java/ai/elimu/web/content/emoji/EmojiCreateController.java
@@ -1,7 +1,7 @@
package ai.elimu.web.content.emoji;
import java.util.Calendar;
-import javax.validation.Valid;
+import jakarta.validation.Valid;
import org.apache.logging.log4j.Logger;
import ai.elimu.dao.EmojiDao;
diff --git a/src/main/java/ai/elimu/web/content/emoji/EmojiCsvExportController.java b/src/main/java/ai/elimu/web/content/emoji/EmojiCsvExportController.java
index 8acd1e4f1..92dc0fa00 100644
--- a/src/main/java/ai/elimu/web/content/emoji/EmojiCsvExportController.java
+++ b/src/main/java/ai/elimu/web/content/emoji/EmojiCsvExportController.java
@@ -13,7 +13,7 @@
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletResponse;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVPrinter;
import org.apache.logging.log4j.LogManager;
diff --git a/src/main/java/ai/elimu/web/content/emoji/EmojiEditController.java b/src/main/java/ai/elimu/web/content/emoji/EmojiEditController.java
index a7e218ff2..e46b6ccc1 100644
--- a/src/main/java/ai/elimu/web/content/emoji/EmojiEditController.java
+++ b/src/main/java/ai/elimu/web/content/emoji/EmojiEditController.java
@@ -2,7 +2,7 @@
import java.util.Calendar;
import java.util.List;
-import javax.validation.Valid;
+import jakarta.validation.Valid;
import org.apache.logging.log4j.Logger;
import ai.elimu.dao.EmojiDao;
@@ -13,7 +13,7 @@
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
import org.apache.commons.lang.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/src/main/java/ai/elimu/web/content/letter/LetterCreateController.java b/src/main/java/ai/elimu/web/content/letter/LetterCreateController.java
index b114456e0..b18910a7f 100644
--- a/src/main/java/ai/elimu/web/content/letter/LetterCreateController.java
+++ b/src/main/java/ai/elimu/web/content/letter/LetterCreateController.java
@@ -1,7 +1,7 @@
package ai.elimu.web.content.letter;
import java.util.Calendar;
-import javax.validation.Valid;
+import jakarta.validation.Valid;
import org.apache.logging.log4j.Logger;
import ai.elimu.dao.LetterContributionEventDao;
@@ -11,8 +11,8 @@
import ai.elimu.model.contributor.LetterContributionEvent;
import ai.elimu.util.DiscordHelper;
import ai.elimu.web.context.EnvironmentContextLoaderListener;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpSession;
import org.apache.commons.lang.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/src/main/java/ai/elimu/web/content/letter/LetterCsvExportController.java b/src/main/java/ai/elimu/web/content/letter/LetterCsvExportController.java
index 76f5fead7..ead29c397 100644
--- a/src/main/java/ai/elimu/web/content/letter/LetterCsvExportController.java
+++ b/src/main/java/ai/elimu/web/content/letter/LetterCsvExportController.java
@@ -13,7 +13,7 @@
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletResponse;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVPrinter;
import org.apache.logging.log4j.LogManager;
diff --git a/src/main/java/ai/elimu/web/content/letter/LetterEditController.java b/src/main/java/ai/elimu/web/content/letter/LetterEditController.java
index 68dba699c..2787b5cc5 100644
--- a/src/main/java/ai/elimu/web/content/letter/LetterEditController.java
+++ b/src/main/java/ai/elimu/web/content/letter/LetterEditController.java
@@ -1,7 +1,7 @@
package ai.elimu.web.content.letter;
import java.util.Calendar;
-import javax.validation.Valid;
+import jakarta.validation.Valid;
import org.apache.logging.log4j.Logger;
import ai.elimu.dao.LetterContributionEventDao;
@@ -11,8 +11,8 @@
import ai.elimu.model.contributor.LetterContributionEvent;
import ai.elimu.util.DiscordHelper;
import ai.elimu.web.context.EnvironmentContextLoaderListener;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpSession;
import org.apache.commons.lang.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/src/main/java/ai/elimu/web/content/letter_sound/LetterSoundCreateController.java b/src/main/java/ai/elimu/web/content/letter_sound/LetterSoundCreateController.java
index 8688041c1..962515e86 100644
--- a/src/main/java/ai/elimu/web/content/letter_sound/LetterSoundCreateController.java
+++ b/src/main/java/ai/elimu/web/content/letter_sound/LetterSoundCreateController.java
@@ -1,7 +1,7 @@
package ai.elimu.web.content.letter_sound;
import java.util.List;
-import javax.validation.Valid;
+import jakarta.validation.Valid;
import ai.elimu.model.contributor.LetterSoundContributionEvent;
import org.apache.logging.log4j.Logger;
@@ -23,8 +23,8 @@
import ai.elimu.web.context.EnvironmentContextLoaderListener;
import java.util.Calendar;
import java.util.stream.Collectors;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpSession;
import org.apache.commons.lang.StringUtils;
import ai.elimu.dao.SoundDao;
diff --git a/src/main/java/ai/elimu/web/content/letter_sound/LetterSoundCsvExportController.java b/src/main/java/ai/elimu/web/content/letter_sound/LetterSoundCsvExportController.java
index 14f5a0c30..47c8fc6e9 100644
--- a/src/main/java/ai/elimu/web/content/letter_sound/LetterSoundCsvExportController.java
+++ b/src/main/java/ai/elimu/web/content/letter_sound/LetterSoundCsvExportController.java
@@ -13,7 +13,7 @@
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletResponse;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVPrinter;
import org.apache.logging.log4j.LogManager;
diff --git a/src/main/java/ai/elimu/web/content/letter_sound/LetterSoundEditController.java b/src/main/java/ai/elimu/web/content/letter_sound/LetterSoundEditController.java
index 4ddca0da8..937b0a04e 100644
--- a/src/main/java/ai/elimu/web/content/letter_sound/LetterSoundEditController.java
+++ b/src/main/java/ai/elimu/web/content/letter_sound/LetterSoundEditController.java
@@ -1,7 +1,7 @@
package ai.elimu.web.content.letter_sound;
import java.util.List;
-import javax.validation.Valid;
+import jakarta.validation.Valid;
import ai.elimu.model.contributor.LetterSoundContributionEvent;
import org.apache.logging.log4j.Logger;
@@ -25,8 +25,8 @@
import ai.elimu.model.contributor.Contributor;
import ai.elimu.util.DiscordHelper;
import java.util.Calendar;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpSession;
import org.apache.commons.lang.StringUtils;
import ai.elimu.web.context.EnvironmentContextLoaderListener;
import java.util.stream.Collectors;
diff --git a/src/main/java/ai/elimu/web/content/letter_sound/LetterSoundPeerReviewsController.java b/src/main/java/ai/elimu/web/content/letter_sound/LetterSoundPeerReviewsController.java
index b40428af7..1fb15672a 100644
--- a/src/main/java/ai/elimu/web/content/letter_sound/LetterSoundPeerReviewsController.java
+++ b/src/main/java/ai/elimu/web/content/letter_sound/LetterSoundPeerReviewsController.java
@@ -9,7 +9,7 @@
import ai.elimu.model.contributor.LetterSoundPeerReviewEvent;
import java.util.ArrayList;
import java.util.List;
-import javax.servlet.http.HttpSession;
+import jakarta.servlet.http.HttpSession;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/src/main/java/ai/elimu/web/content/multimedia/audio/AudioCreateController.java b/src/main/java/ai/elimu/web/content/multimedia/audio/AudioCreateController.java
index 20e264bd8..0e07dc72f 100644
--- a/src/main/java/ai/elimu/web/content/multimedia/audio/AudioCreateController.java
+++ b/src/main/java/ai/elimu/web/content/multimedia/audio/AudioCreateController.java
@@ -3,8 +3,8 @@
import ai.elimu.dao.AudioContributionEventDao;
import java.io.IOException;
import java.util.Calendar;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
import org.apache.commons.lang.StringUtils;
import org.apache.logging.log4j.Logger;
@@ -29,7 +29,7 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import javax.servlet.http.HttpSession;
+import jakarta.servlet.http.HttpSession;
import org.apache.logging.log4j.LogManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
diff --git a/src/main/java/ai/elimu/web/content/multimedia/audio/AudioCsvExportController.java b/src/main/java/ai/elimu/web/content/multimedia/audio/AudioCsvExportController.java
index f05ab48d3..351e71f39 100644
--- a/src/main/java/ai/elimu/web/content/multimedia/audio/AudioCsvExportController.java
+++ b/src/main/java/ai/elimu/web/content/multimedia/audio/AudioCsvExportController.java
@@ -11,7 +11,7 @@
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletResponse;
import org.apache.logging.log4j.LogManager;
import org.springframework.web.bind.annotation.RequestMethod;
diff --git a/src/main/java/ai/elimu/web/content/multimedia/audio/AudioEditController.java b/src/main/java/ai/elimu/web/content/multimedia/audio/AudioEditController.java
index 2e58490dc..ed3b4817f 100644
--- a/src/main/java/ai/elimu/web/content/multimedia/audio/AudioEditController.java
+++ b/src/main/java/ai/elimu/web/content/multimedia/audio/AudioEditController.java
@@ -5,8 +5,8 @@
import java.util.Calendar;
import java.util.Iterator;
import java.util.Set;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
import org.apache.commons.lang.StringUtils;
import org.apache.logging.log4j.Logger;
@@ -35,7 +35,7 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import javax.servlet.http.HttpSession;
+import jakarta.servlet.http.HttpSession;
import org.apache.logging.log4j.LogManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
diff --git a/src/main/java/ai/elimu/web/content/multimedia/image/ImageCreateController.java b/src/main/java/ai/elimu/web/content/multimedia/image/ImageCreateController.java
index 95d68a940..5cf0a2aa0 100644
--- a/src/main/java/ai/elimu/web/content/multimedia/image/ImageCreateController.java
+++ b/src/main/java/ai/elimu/web/content/multimedia/image/ImageCreateController.java
@@ -5,8 +5,8 @@
import java.util.Calendar;
import java.util.HashSet;
import java.util.Set;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
import org.apache.commons.lang.StringUtils;
import org.apache.logging.log4j.Logger;
@@ -25,7 +25,7 @@
import ai.elimu.util.ImageHelper;
import ai.elimu.web.context.EnvironmentContextLoaderListener;
import java.util.Arrays;
-import javax.servlet.http.HttpSession;
+import jakarta.servlet.http.HttpSession;
import org.apache.logging.log4j.LogManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
diff --git a/src/main/java/ai/elimu/web/content/multimedia/image/ImageCsvExportController.java b/src/main/java/ai/elimu/web/content/multimedia/image/ImageCsvExportController.java
index 095c04a5e..b6f4371f5 100644
--- a/src/main/java/ai/elimu/web/content/multimedia/image/ImageCsvExportController.java
+++ b/src/main/java/ai/elimu/web/content/multimedia/image/ImageCsvExportController.java
@@ -12,7 +12,7 @@
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletResponse;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVPrinter;
diff --git a/src/main/java/ai/elimu/web/content/multimedia/image/ImageEditController.java b/src/main/java/ai/elimu/web/content/multimedia/image/ImageEditController.java
index a48592383..36dbc774d 100644
--- a/src/main/java/ai/elimu/web/content/multimedia/image/ImageEditController.java
+++ b/src/main/java/ai/elimu/web/content/multimedia/image/ImageEditController.java
@@ -4,8 +4,8 @@
import java.util.Calendar;
import java.util.Iterator;
import java.util.Set;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
import org.apache.commons.lang.StringUtils;
import org.apache.logging.log4j.Logger;
@@ -35,7 +35,7 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import javax.servlet.http.HttpSession;
+import jakarta.servlet.http.HttpSession;
import org.apache.logging.log4j.LogManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
diff --git a/src/main/java/ai/elimu/web/content/multimedia/video/VideoCreateController.java b/src/main/java/ai/elimu/web/content/multimedia/video/VideoCreateController.java
index c843b6e42..1e27cf470 100644
--- a/src/main/java/ai/elimu/web/content/multimedia/video/VideoCreateController.java
+++ b/src/main/java/ai/elimu/web/content/multimedia/video/VideoCreateController.java
@@ -2,8 +2,8 @@
import java.io.IOException;
import java.util.Calendar;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
import org.apache.commons.lang.StringUtils;
import org.apache.logging.log4j.Logger;
diff --git a/src/main/java/ai/elimu/web/content/multimedia/video/VideoCsvExportController.java b/src/main/java/ai/elimu/web/content/multimedia/video/VideoCsvExportController.java
index e3f4ad2ee..9c91ac6f2 100644
--- a/src/main/java/ai/elimu/web/content/multimedia/video/VideoCsvExportController.java
+++ b/src/main/java/ai/elimu/web/content/multimedia/video/VideoCsvExportController.java
@@ -11,7 +11,7 @@
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletResponse;
import org.apache.logging.log4j.LogManager;
import org.springframework.web.bind.annotation.RequestMethod;
diff --git a/src/main/java/ai/elimu/web/content/multimedia/video/VideoEditController.java b/src/main/java/ai/elimu/web/content/multimedia/video/VideoEditController.java
index c4d9af53c..8fa6a9c82 100644
--- a/src/main/java/ai/elimu/web/content/multimedia/video/VideoEditController.java
+++ b/src/main/java/ai/elimu/web/content/multimedia/video/VideoEditController.java
@@ -5,8 +5,8 @@
import java.util.Calendar;
import java.util.Iterator;
import java.util.Set;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
import org.apache.commons.lang.StringUtils;
import org.apache.logging.log4j.Logger;
diff --git a/src/main/java/ai/elimu/web/content/number/NumberCreateController.java b/src/main/java/ai/elimu/web/content/number/NumberCreateController.java
index 772060d0a..67295d45f 100644
--- a/src/main/java/ai/elimu/web/content/number/NumberCreateController.java
+++ b/src/main/java/ai/elimu/web/content/number/NumberCreateController.java
@@ -4,7 +4,7 @@
import ai.elimu.dao.NumberContributionEventDao;
import java.util.Calendar;
import java.util.List;
-import javax.validation.Valid;
+import jakarta.validation.Valid;
import org.apache.logging.log4j.Logger;
import ai.elimu.dao.NumberDao;
@@ -18,8 +18,8 @@
import ai.elimu.web.context.EnvironmentContextLoaderListener;
import java.util.HashMap;
import java.util.Map;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpSession;
import org.apache.commons.lang.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/src/main/java/ai/elimu/web/content/number/NumberCsvExportController.java b/src/main/java/ai/elimu/web/content/number/NumberCsvExportController.java
index 754e06cf1..b49d1d24c 100644
--- a/src/main/java/ai/elimu/web/content/number/NumberCsvExportController.java
+++ b/src/main/java/ai/elimu/web/content/number/NumberCsvExportController.java
@@ -13,7 +13,7 @@
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletResponse;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVPrinter;
import org.apache.logging.log4j.LogManager;
diff --git a/src/main/java/ai/elimu/web/content/number/NumberEditController.java b/src/main/java/ai/elimu/web/content/number/NumberEditController.java
index 2f69a219d..74d573a97 100644
--- a/src/main/java/ai/elimu/web/content/number/NumberEditController.java
+++ b/src/main/java/ai/elimu/web/content/number/NumberEditController.java
@@ -4,7 +4,7 @@
import ai.elimu.dao.NumberContributionEventDao;
import java.util.Calendar;
import java.util.List;
-import javax.validation.Valid;
+import jakarta.validation.Valid;
import org.apache.logging.log4j.Logger;
import ai.elimu.dao.NumberDao;
@@ -19,8 +19,8 @@
import ai.elimu.web.context.EnvironmentContextLoaderListener;
import java.util.HashMap;
import java.util.Map;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpSession;
import org.apache.commons.lang.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/src/main/java/ai/elimu/web/content/number/NumberPeerReviewsController.java b/src/main/java/ai/elimu/web/content/number/NumberPeerReviewsController.java
index eb84eb6d4..4b57ecb0f 100644
--- a/src/main/java/ai/elimu/web/content/number/NumberPeerReviewsController.java
+++ b/src/main/java/ai/elimu/web/content/number/NumberPeerReviewsController.java
@@ -9,7 +9,7 @@
import ai.elimu.model.contributor.NumberPeerReviewEvent;
import java.util.ArrayList;
import java.util.List;
-import javax.servlet.http.HttpSession;
+import jakarta.servlet.http.HttpSession;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/src/main/java/ai/elimu/web/content/peer_review/AudioPeerReviewEventCreateController.java b/src/main/java/ai/elimu/web/content/peer_review/AudioPeerReviewEventCreateController.java
index 1126afaca..e54274cdf 100644
--- a/src/main/java/ai/elimu/web/content/peer_review/AudioPeerReviewEventCreateController.java
+++ b/src/main/java/ai/elimu/web/content/peer_review/AudioPeerReviewEventCreateController.java
@@ -12,7 +12,7 @@
import ai.elimu.util.DiscordHelper;
import ai.elimu.web.context.EnvironmentContextLoaderListener;
import java.util.Calendar;
-import javax.servlet.http.HttpSession;
+import jakarta.servlet.http.HttpSession;
import org.apache.commons.lang.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/src/main/java/ai/elimu/web/content/peer_review/LetterSoundPeerReviewEventCreateController.java b/src/main/java/ai/elimu/web/content/peer_review/LetterSoundPeerReviewEventCreateController.java
index b39eddbf9..2bae82dc2 100644
--- a/src/main/java/ai/elimu/web/content/peer_review/LetterSoundPeerReviewEventCreateController.java
+++ b/src/main/java/ai/elimu/web/content/peer_review/LetterSoundPeerReviewEventCreateController.java
@@ -14,7 +14,7 @@
import ai.elimu.web.context.EnvironmentContextLoaderListener;
import java.util.Calendar;
import java.util.stream.Collectors;
-import javax.servlet.http.HttpSession;
+import jakarta.servlet.http.HttpSession;
import org.apache.commons.lang.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/src/main/java/ai/elimu/web/content/peer_review/NumberPeerReviewEventCreateController.java b/src/main/java/ai/elimu/web/content/peer_review/NumberPeerReviewEventCreateController.java
index 4f3a946db..663aae979 100644
--- a/src/main/java/ai/elimu/web/content/peer_review/NumberPeerReviewEventCreateController.java
+++ b/src/main/java/ai/elimu/web/content/peer_review/NumberPeerReviewEventCreateController.java
@@ -12,7 +12,7 @@
import ai.elimu.util.DiscordHelper;
import ai.elimu.web.context.EnvironmentContextLoaderListener;
import java.util.Calendar;
-import javax.servlet.http.HttpSession;
+import jakarta.servlet.http.HttpSession;
import org.apache.commons.lang.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/src/main/java/ai/elimu/web/content/peer_review/StoryBookPeerReviewEventCreateController.java b/src/main/java/ai/elimu/web/content/peer_review/StoryBookPeerReviewEventCreateController.java
index b31903398..ca0377c42 100644
--- a/src/main/java/ai/elimu/web/content/peer_review/StoryBookPeerReviewEventCreateController.java
+++ b/src/main/java/ai/elimu/web/content/peer_review/StoryBookPeerReviewEventCreateController.java
@@ -12,7 +12,7 @@
import ai.elimu.util.DiscordHelper;
import ai.elimu.web.context.EnvironmentContextLoaderListener;
import java.util.Calendar;
-import javax.servlet.http.HttpSession;
+import jakarta.servlet.http.HttpSession;
import org.apache.commons.lang.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/src/main/java/ai/elimu/web/content/peer_review/WordPeerReviewEventCreateController.java b/src/main/java/ai/elimu/web/content/peer_review/WordPeerReviewEventCreateController.java
index 556894fd1..06ad64c58 100644
--- a/src/main/java/ai/elimu/web/content/peer_review/WordPeerReviewEventCreateController.java
+++ b/src/main/java/ai/elimu/web/content/peer_review/WordPeerReviewEventCreateController.java
@@ -12,7 +12,7 @@
import ai.elimu.util.DiscordHelper;
import ai.elimu.web.context.EnvironmentContextLoaderListener;
import java.util.Calendar;
-import javax.servlet.http.HttpSession;
+import jakarta.servlet.http.HttpSession;
import org.apache.commons.lang.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/src/main/java/ai/elimu/web/content/sound/SoundCreateController.java b/src/main/java/ai/elimu/web/content/sound/SoundCreateController.java
index cf248f8e4..b53602347 100644
--- a/src/main/java/ai/elimu/web/content/sound/SoundCreateController.java
+++ b/src/main/java/ai/elimu/web/content/sound/SoundCreateController.java
@@ -2,8 +2,8 @@
import ai.elimu.dao.SoundContributionEventDao;
import java.util.Calendar;
-import javax.servlet.http.HttpSession;
-import javax.validation.Valid;
+import jakarta.servlet.http.HttpSession;
+import jakarta.validation.Valid;
import org.apache.commons.lang.StringUtils;
import org.apache.logging.log4j.Logger;
@@ -21,7 +21,7 @@
import ai.elimu.model.contributor.SoundContributionEvent;
import ai.elimu.util.DiscordHelper;
import ai.elimu.web.context.EnvironmentContextLoaderListener;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
@Controller
@RequestMapping("/content/sound/create")
diff --git a/src/main/java/ai/elimu/web/content/sound/SoundCsvExportController.java b/src/main/java/ai/elimu/web/content/sound/SoundCsvExportController.java
index 9a67d2b1c..edb666809 100644
--- a/src/main/java/ai/elimu/web/content/sound/SoundCsvExportController.java
+++ b/src/main/java/ai/elimu/web/content/sound/SoundCsvExportController.java
@@ -11,7 +11,7 @@
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletResponse;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVPrinter;
import org.apache.logging.log4j.LogManager;
diff --git a/src/main/java/ai/elimu/web/content/sound/SoundEditController.java b/src/main/java/ai/elimu/web/content/sound/SoundEditController.java
index 6c9958123..9aacd573f 100644
--- a/src/main/java/ai/elimu/web/content/sound/SoundEditController.java
+++ b/src/main/java/ai/elimu/web/content/sound/SoundEditController.java
@@ -3,8 +3,8 @@
import ai.elimu.dao.LetterSoundDao;
import ai.elimu.dao.SoundContributionEventDao;
import java.util.Calendar;
-import javax.servlet.http.HttpSession;
-import javax.validation.Valid;
+import jakarta.servlet.http.HttpSession;
+import jakarta.validation.Valid;
import org.apache.commons.lang.StringUtils;
import org.apache.logging.log4j.Logger;
@@ -23,7 +23,7 @@
import ai.elimu.model.contributor.SoundContributionEvent;
import ai.elimu.util.DiscordHelper;
import ai.elimu.web.context.EnvironmentContextLoaderListener;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
@Controller
@RequestMapping("/content/sound/edit")
diff --git a/src/main/java/ai/elimu/web/content/storybook/StoryBookCreateController.java b/src/main/java/ai/elimu/web/content/storybook/StoryBookCreateController.java
index fd3d756b1..a2b8e2aee 100644
--- a/src/main/java/ai/elimu/web/content/storybook/StoryBookCreateController.java
+++ b/src/main/java/ai/elimu/web/content/storybook/StoryBookCreateController.java
@@ -2,7 +2,7 @@
import java.util.Calendar;
import java.util.List;
-import javax.validation.Valid;
+import jakarta.validation.Valid;
import org.apache.logging.log4j.Logger;
import ai.elimu.dao.ImageDao;
@@ -16,8 +16,8 @@
import ai.elimu.model.v2.enums.ReadingLevel;
import ai.elimu.util.DiscordHelper;
import ai.elimu.web.context.EnvironmentContextLoaderListener;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpSession;
import org.apache.commons.lang.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/src/main/java/ai/elimu/web/content/storybook/StoryBookCreateFromEPubController.java b/src/main/java/ai/elimu/web/content/storybook/StoryBookCreateFromEPubController.java
index 8ae19115b..fa435e1c5 100644
--- a/src/main/java/ai/elimu/web/content/storybook/StoryBookCreateFromEPubController.java
+++ b/src/main/java/ai/elimu/web/content/storybook/StoryBookCreateFromEPubController.java
@@ -7,9 +7,9 @@
import ai.elimu.dao.StoryBookDao;
import ai.elimu.dao.StoryBookParagraphDao;
import java.io.IOException;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpSession;
import org.apache.logging.log4j.Logger;
import ai.elimu.model.content.StoryBook;
diff --git a/src/main/java/ai/elimu/web/content/storybook/StoryBookCsvExportController.java b/src/main/java/ai/elimu/web/content/storybook/StoryBookCsvExportController.java
index ccf509e36..c40c677dd 100644
--- a/src/main/java/ai/elimu/web/content/storybook/StoryBookCsvExportController.java
+++ b/src/main/java/ai/elimu/web/content/storybook/StoryBookCsvExportController.java
@@ -22,7 +22,7 @@
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletResponse;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVPrinter;
import org.apache.logging.log4j.LogManager;
diff --git a/src/main/java/ai/elimu/web/content/storybook/StoryBookEditController.java b/src/main/java/ai/elimu/web/content/storybook/StoryBookEditController.java
index e6581f213..7ca808455 100644
--- a/src/main/java/ai/elimu/web/content/storybook/StoryBookEditController.java
+++ b/src/main/java/ai/elimu/web/content/storybook/StoryBookEditController.java
@@ -4,8 +4,8 @@
import java.util.Calendar;
import java.util.List;
import java.util.Map;
-import javax.servlet.http.HttpServletRequest;
-import javax.validation.Valid;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.validation.Valid;
import org.apache.logging.log4j.Logger;
import ai.elimu.dao.ImageDao;
@@ -36,7 +36,7 @@
import ai.elimu.web.context.EnvironmentContextLoaderListener;
import java.util.ArrayList;
import java.util.HashMap;
-import javax.servlet.http.HttpSession;
+import jakarta.servlet.http.HttpSession;
import org.apache.commons.lang.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/src/main/java/ai/elimu/web/content/storybook/StoryBookPeerReviewsController.java b/src/main/java/ai/elimu/web/content/storybook/StoryBookPeerReviewsController.java
index b3e7a70b5..538e80796 100644
--- a/src/main/java/ai/elimu/web/content/storybook/StoryBookPeerReviewsController.java
+++ b/src/main/java/ai/elimu/web/content/storybook/StoryBookPeerReviewsController.java
@@ -9,7 +9,7 @@
import ai.elimu.model.contributor.StoryBookPeerReviewEvent;
import java.util.ArrayList;
import java.util.List;
-import javax.servlet.http.HttpSession;
+import jakarta.servlet.http.HttpSession;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/src/main/java/ai/elimu/web/content/storybook/chapter/StoryBookChapterCreateController.java b/src/main/java/ai/elimu/web/content/storybook/chapter/StoryBookChapterCreateController.java
index 368428663..736d8483f 100644
--- a/src/main/java/ai/elimu/web/content/storybook/chapter/StoryBookChapterCreateController.java
+++ b/src/main/java/ai/elimu/web/content/storybook/chapter/StoryBookChapterCreateController.java
@@ -14,8 +14,8 @@
import ai.elimu.web.context.EnvironmentContextLoaderListener;
import java.util.Calendar;
import java.util.List;
-import javax.servlet.http.HttpSession;
-import javax.validation.Valid;
+import jakarta.servlet.http.HttpSession;
+import jakarta.validation.Valid;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/src/main/java/ai/elimu/web/content/storybook/chapter/StoryBookChapterDeleteController.java b/src/main/java/ai/elimu/web/content/storybook/chapter/StoryBookChapterDeleteController.java
index 6cdc9143d..6d3d57780 100644
--- a/src/main/java/ai/elimu/web/content/storybook/chapter/StoryBookChapterDeleteController.java
+++ b/src/main/java/ai/elimu/web/content/storybook/chapter/StoryBookChapterDeleteController.java
@@ -22,7 +22,7 @@
import ai.elimu.web.context.EnvironmentContextLoaderListener;
import java.util.Calendar;
import java.util.List;
-import javax.servlet.http.HttpSession;
+import jakarta.servlet.http.HttpSession;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/src/main/java/ai/elimu/web/content/storybook/paragraph/StoryBookParagraphCreateController.java b/src/main/java/ai/elimu/web/content/storybook/paragraph/StoryBookParagraphCreateController.java
index 9b4406b1d..e66a85f0c 100644
--- a/src/main/java/ai/elimu/web/content/storybook/paragraph/StoryBookParagraphCreateController.java
+++ b/src/main/java/ai/elimu/web/content/storybook/paragraph/StoryBookParagraphCreateController.java
@@ -17,9 +17,9 @@
import ai.elimu.web.context.EnvironmentContextLoaderListener;
import java.util.Calendar;
import java.util.List;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
-import javax.validation.Valid;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpSession;
+import jakarta.validation.Valid;
import org.apache.logging.log4j.LogManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
diff --git a/src/main/java/ai/elimu/web/content/storybook/paragraph/StoryBookParagraphDeleteController.java b/src/main/java/ai/elimu/web/content/storybook/paragraph/StoryBookParagraphDeleteController.java
index 1bac26f31..53142271d 100644
--- a/src/main/java/ai/elimu/web/content/storybook/paragraph/StoryBookParagraphDeleteController.java
+++ b/src/main/java/ai/elimu/web/content/storybook/paragraph/StoryBookParagraphDeleteController.java
@@ -17,7 +17,7 @@
import ai.elimu.web.context.EnvironmentContextLoaderListener;
import java.util.Calendar;
import java.util.List;
-import javax.servlet.http.HttpSession;
+import jakarta.servlet.http.HttpSession;
import org.apache.logging.log4j.LogManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
diff --git a/src/main/java/ai/elimu/web/content/storybook/paragraph/StoryBookParagraphEditController.java b/src/main/java/ai/elimu/web/content/storybook/paragraph/StoryBookParagraphEditController.java
index 596d40f27..740847b5f 100644
--- a/src/main/java/ai/elimu/web/content/storybook/paragraph/StoryBookParagraphEditController.java
+++ b/src/main/java/ai/elimu/web/content/storybook/paragraph/StoryBookParagraphEditController.java
@@ -13,9 +13,9 @@
import ai.elimu.util.DiscordHelper;
import ai.elimu.web.context.EnvironmentContextLoaderListener;
import java.util.Calendar;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
-import javax.validation.Valid;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpSession;
+import jakarta.validation.Valid;
import org.apache.commons.lang.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/src/main/java/ai/elimu/web/content/syllable/SyllableCsvExportController.java b/src/main/java/ai/elimu/web/content/syllable/SyllableCsvExportController.java
index d2922c4c9..67b883336 100644
--- a/src/main/java/ai/elimu/web/content/syllable/SyllableCsvExportController.java
+++ b/src/main/java/ai/elimu/web/content/syllable/SyllableCsvExportController.java
@@ -13,7 +13,7 @@
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletResponse;
import org.apache.logging.log4j.LogManager;
import org.springframework.web.bind.annotation.RequestMethod;
diff --git a/src/main/java/ai/elimu/web/content/word/WordCreateController.java b/src/main/java/ai/elimu/web/content/word/WordCreateController.java
index 2a2430789..5756ee3bd 100644
--- a/src/main/java/ai/elimu/web/content/word/WordCreateController.java
+++ b/src/main/java/ai/elimu/web/content/word/WordCreateController.java
@@ -3,7 +3,7 @@
import java.util.Calendar;
import java.util.List;
import java.util.Set;
-import javax.validation.Valid;
+import jakarta.validation.Valid;
import org.apache.logging.log4j.Logger;
import ai.elimu.dao.EmojiDao;
@@ -25,8 +25,8 @@
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpSession;
import org.apache.commons.lang.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/src/main/java/ai/elimu/web/content/word/WordCsvExportController.java b/src/main/java/ai/elimu/web/content/word/WordCsvExportController.java
index 07ee8582c..7a1111e73 100644
--- a/src/main/java/ai/elimu/web/content/word/WordCsvExportController.java
+++ b/src/main/java/ai/elimu/web/content/word/WordCsvExportController.java
@@ -15,7 +15,7 @@
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletResponse;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVPrinter;
import org.apache.logging.log4j.LogManager;
diff --git a/src/main/java/ai/elimu/web/content/word/WordEditController.java b/src/main/java/ai/elimu/web/content/word/WordEditController.java
index b82e594b2..faee76bb6 100644
--- a/src/main/java/ai/elimu/web/content/word/WordEditController.java
+++ b/src/main/java/ai/elimu/web/content/word/WordEditController.java
@@ -2,7 +2,7 @@
import java.util.Calendar;
import java.util.List;
-import javax.validation.Valid;
+import jakarta.validation.Valid;
import org.apache.logging.log4j.Logger;
import ai.elimu.dao.AudioDao;
@@ -29,8 +29,8 @@
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpSession;
import org.apache.commons.lang.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/src/main/java/ai/elimu/web/content/word/WordPeerReviewsController.java b/src/main/java/ai/elimu/web/content/word/WordPeerReviewsController.java
index 1f3bff4f9..24319d631 100644
--- a/src/main/java/ai/elimu/web/content/word/WordPeerReviewsController.java
+++ b/src/main/java/ai/elimu/web/content/word/WordPeerReviewsController.java
@@ -13,7 +13,7 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import javax.servlet.http.HttpSession;
+import jakarta.servlet.http.HttpSession;
import org.apache.commons.lang.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
diff --git a/src/main/java/ai/elimu/web/context/EnvironmentContextLoaderListener.java b/src/main/java/ai/elimu/web/context/EnvironmentContextLoaderListener.java
index fe3363d32..a5a99bef4 100644
--- a/src/main/java/ai/elimu/web/context/EnvironmentContextLoaderListener.java
+++ b/src/main/java/ai/elimu/web/context/EnvironmentContextLoaderListener.java
@@ -5,8 +5,8 @@
import java.io.InputStream;
import java.util.Properties;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletContextEvent;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.ServletContextEvent;
import org.apache.commons.lang.StringUtils;
import org.apache.logging.log4j.Logger;
@@ -24,7 +24,7 @@
import org.springframework.web.context.support.WebApplicationContextUtils;
/**
- * Use {@link WebApplicationContextUtils#getWebApplicationContext(javax.servlet.ServletContext)}
+ * Use {@link WebApplicationContextUtils#getWebApplicationContext(jakarta.servlet.ServletContext)}
* to access this listener anywhere in the web application, outside of the framework.
*/
public class EnvironmentContextLoaderListener extends ContextLoaderListener {
diff --git a/src/main/java/ai/elimu/web/download/ApkController.java b/src/main/java/ai/elimu/web/download/ApkController.java
index 712221d9c..4ba5d93d8 100644
--- a/src/main/java/ai/elimu/web/download/ApkController.java
+++ b/src/main/java/ai/elimu/web/download/ApkController.java
@@ -3,7 +3,7 @@
import java.io.EOFException;
import java.io.IOException;
import java.io.OutputStream;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
@@ -11,7 +11,7 @@
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletResponse;
import ai.elimu.dao.ApplicationDao;
import ai.elimu.dao.ApplicationVersionDao;
import ai.elimu.model.admin.Application;
diff --git a/src/main/java/ai/elimu/web/download/AudioController.java b/src/main/java/ai/elimu/web/download/AudioController.java
index 1a95e1c30..9db655d12 100644
--- a/src/main/java/ai/elimu/web/download/AudioController.java
+++ b/src/main/java/ai/elimu/web/download/AudioController.java
@@ -10,7 +10,7 @@
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletResponse;
import ai.elimu.dao.AudioDao;
import ai.elimu.model.content.multimedia.Audio;
import org.apache.logging.log4j.LogManager;
diff --git a/src/main/java/ai/elimu/web/download/ImageController.java b/src/main/java/ai/elimu/web/download/ImageController.java
index d35710a8c..6b7eafebe 100644
--- a/src/main/java/ai/elimu/web/download/ImageController.java
+++ b/src/main/java/ai/elimu/web/download/ImageController.java
@@ -10,7 +10,7 @@
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletResponse;
import ai.elimu.dao.ImageDao;
import ai.elimu.model.content.multimedia.Image;
import org.apache.logging.log4j.LogManager;
diff --git a/src/main/java/ai/elimu/web/download/VideoController.java b/src/main/java/ai/elimu/web/download/VideoController.java
index 50a0cdfe0..2a576b8f6 100644
--- a/src/main/java/ai/elimu/web/download/VideoController.java
+++ b/src/main/java/ai/elimu/web/download/VideoController.java
@@ -10,7 +10,7 @@
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletResponse;
import ai.elimu.dao.VideoDao;
import ai.elimu.model.content.multimedia.Video;
import org.apache.logging.log4j.LogManager;
diff --git a/src/main/java/ai/elimu/web/servlet/CustomDispatcherServlet.java b/src/main/java/ai/elimu/web/servlet/CustomDispatcherServlet.java
index 74a287c5b..80ff7f9cd 100644
--- a/src/main/java/ai/elimu/web/servlet/CustomDispatcherServlet.java
+++ b/src/main/java/ai/elimu/web/servlet/CustomDispatcherServlet.java
@@ -13,7 +13,7 @@
import ai.elimu.web.context.EnvironmentContextLoaderListener;
import java.io.File;
import java.util.EnumSet;
-import javax.persistence.Entity;
+import jakarta.persistence.Entity;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.hibernate.boot.Metadata;
diff --git a/src/main/java/ai/elimu/web/servlet/CustomSimpleMappingExceptionResolver.java b/src/main/java/ai/elimu/web/servlet/CustomSimpleMappingExceptionResolver.java
index 3182aa84d..88702780a 100644
--- a/src/main/java/ai/elimu/web/servlet/CustomSimpleMappingExceptionResolver.java
+++ b/src/main/java/ai/elimu/web/servlet/CustomSimpleMappingExceptionResolver.java
@@ -1,6 +1,6 @@
package ai.elimu.web.servlet;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
diff --git a/src/main/java/ai/elimu/web/tags/AsideTag.java b/src/main/java/ai/elimu/web/tags/AsideTag.java
index 0e83749f6..ce11cdcb6 100644
--- a/src/main/java/ai/elimu/web/tags/AsideTag.java
+++ b/src/main/java/ai/elimu/web/tags/AsideTag.java
@@ -1,7 +1,7 @@
package ai.elimu.web.tags;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.tagext.BodyTagSupport;
+import jakarta.servlet.jsp.JspException;
+import jakarta.servlet.jsp.tagext.BodyTagSupport;
/**
* Implementation of the {@code content:aside} tag.
diff --git a/src/main/java/ai/elimu/web/tags/BannerTag.java b/src/main/java/ai/elimu/web/tags/BannerTag.java
index e41466c33..28d7fccb6 100644
--- a/src/main/java/ai/elimu/web/tags/BannerTag.java
+++ b/src/main/java/ai/elimu/web/tags/BannerTag.java
@@ -1,7 +1,7 @@
package ai.elimu.web.tags;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.tagext.BodyTagSupport;
+import jakarta.servlet.jsp.JspException;
+import jakarta.servlet.jsp.tagext.BodyTagSupport;
/**
* Implementation of the {@code content:banner} tag.
diff --git a/src/main/java/ai/elimu/web/tags/GetAsideTag.java b/src/main/java/ai/elimu/web/tags/GetAsideTag.java
index 860926c6e..a3b34df78 100644
--- a/src/main/java/ai/elimu/web/tags/GetAsideTag.java
+++ b/src/main/java/ai/elimu/web/tags/GetAsideTag.java
@@ -2,9 +2,9 @@
import java.io.IOException;
import java.io.Writer;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.JspTagException;
-import javax.servlet.jsp.tagext.TagSupport;
+import jakarta.servlet.jsp.JspException;
+import jakarta.servlet.jsp.JspTagException;
+import jakarta.servlet.jsp.tagext.TagSupport;
/**
* Implementation of the {@code content:getaside} tag.
diff --git a/src/main/java/ai/elimu/web/tags/GetBannerTag.java b/src/main/java/ai/elimu/web/tags/GetBannerTag.java
index e3d688329..2b4c0a766 100644
--- a/src/main/java/ai/elimu/web/tags/GetBannerTag.java
+++ b/src/main/java/ai/elimu/web/tags/GetBannerTag.java
@@ -2,9 +2,9 @@
import java.io.IOException;
import java.io.Writer;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.JspTagException;
-import javax.servlet.jsp.tagext.TagSupport;
+import jakarta.servlet.jsp.JspException;
+import jakarta.servlet.jsp.JspTagException;
+import jakarta.servlet.jsp.tagext.TagSupport;
/**
* Implementation of the {@code content:getbanner} tag.
diff --git a/src/main/java/ai/elimu/web/tags/GetSectionTag.java b/src/main/java/ai/elimu/web/tags/GetSectionTag.java
index 2e0c17f85..cc376d912 100644
--- a/src/main/java/ai/elimu/web/tags/GetSectionTag.java
+++ b/src/main/java/ai/elimu/web/tags/GetSectionTag.java
@@ -2,9 +2,9 @@
import java.io.IOException;
import java.io.Writer;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.JspTagException;
-import javax.servlet.jsp.tagext.TagSupport;
+import jakarta.servlet.jsp.JspException;
+import jakarta.servlet.jsp.JspTagException;
+import jakarta.servlet.jsp.tagext.TagSupport;
/**
* Implementation of the {@code content:getsection} tag.
diff --git a/src/main/java/ai/elimu/web/tags/GetTitleTag.java b/src/main/java/ai/elimu/web/tags/GetTitleTag.java
index 737d9d576..7ad2eb02e 100644
--- a/src/main/java/ai/elimu/web/tags/GetTitleTag.java
+++ b/src/main/java/ai/elimu/web/tags/GetTitleTag.java
@@ -2,9 +2,9 @@
import java.io.IOException;
import java.io.Writer;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.JspTagException;
-import javax.servlet.jsp.tagext.TagSupport;
+import jakarta.servlet.jsp.JspException;
+import jakarta.servlet.jsp.JspTagException;
+import jakarta.servlet.jsp.tagext.TagSupport;
/**
* Implementation of the {@code content:gettitle} tag.
diff --git a/src/main/java/ai/elimu/web/tags/SectionTag.java b/src/main/java/ai/elimu/web/tags/SectionTag.java
index ae8231a3e..d33c7aa90 100644
--- a/src/main/java/ai/elimu/web/tags/SectionTag.java
+++ b/src/main/java/ai/elimu/web/tags/SectionTag.java
@@ -1,7 +1,7 @@
package ai.elimu.web.tags;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.tagext.BodyTagSupport;
+import jakarta.servlet.jsp.JspException;
+import jakarta.servlet.jsp.tagext.BodyTagSupport;
/**
* Implementation of the {@code content:section} tag.
diff --git a/src/main/java/ai/elimu/web/tags/TitleTag.java b/src/main/java/ai/elimu/web/tags/TitleTag.java
index d82fbb646..668ccb0e9 100644
--- a/src/main/java/ai/elimu/web/tags/TitleTag.java
+++ b/src/main/java/ai/elimu/web/tags/TitleTag.java
@@ -1,7 +1,7 @@
package ai.elimu.web.tags;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.tagext.BodyTagSupport;
+import jakarta.servlet.jsp.JspException;
+import jakarta.servlet.jsp.tagext.BodyTagSupport;
/**
* Implementation of the {@code content:title} tag.
diff --git a/src/main/webapp/WEB-INF/spring/applicationContext.xml b/src/main/webapp/WEB-INF/spring/applicationContext.xml
index 2ec761095..d80479d06 100644
--- a/src/main/webapp/WEB-INF/spring/applicationContext.xml
+++ b/src/main/webapp/WEB-INF/spring/applicationContext.xml
@@ -62,10 +62,7 @@
-
-
-
-
+
diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml
index f9561ba55..0acf0d8a4 100644
--- a/src/main/webapp/WEB-INF/web.xml
+++ b/src/main/webapp/WEB-INF/web.xml
@@ -30,11 +30,6 @@
contextConfigLocation
/WEB-INF/spring/applicationContext.xml
-
- 1073741824
- 1073741824
- 0
-