diff --git a/src/main/java/Team5/SmartTowns/rewards/Badge.java b/src/main/java/Team5/SmartTowns/rewards/Badge.java
new file mode 100644
index 0000000000000000000000000000000000000000..4b3ea048f1162f1881fc50176bfbe39667b166ce
--- /dev/null
+++ b/src/main/java/Team5/SmartTowns/rewards/Badge.java
@@ -0,0 +1,51 @@
+/*AUTHOR: Gabriel Copat*/
+package Team5.SmartTowns.rewards;
+
+import lombok.Data;
+
+import java.io.File;
+import java.util.Objects;
+
+@Data
+public class Badge {
+    /* Badges can be earned by completing certain goals.
+     * They are displayed in the user profile page
+     *
+     * For example, one might earn a badge after visiting 20 locations */
+
+    int id;
+    String name;
+    String description;
+    String imgPath;
+    int difficulty; //1-5
+
+    public Badge(int id, String name, String description, int difficulty) {
+        this.id = id;
+        this.name = name;
+        this.description = description;
+        this.difficulty = difficulty;
+        imgPath = findImagePath();
+    }
+
+    private String findImagePath(){
+        /* Finds the image in the Path folder, if image is not found assigns default image */
+        String imgPath = "images/rewards/badges/" + id + ".jpg";
+        String notFoundPath = "images/rewards/badges/0.jpg";
+
+        File imgFile = new File("src/main/resources/static/" + imgPath);
+        return imgFile.exists() ? imgPath : notFoundPath;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        Badge badge = (Badge) o;
+        return id == badge.id && Objects.equals(name, badge.name);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(id, name);
+    }
+}
diff --git a/src/main/java/Team5/SmartTowns/rewards/Sticker.java b/src/main/java/Team5/SmartTowns/rewards/Sticker.java
new file mode 100644
index 0000000000000000000000000000000000000000..77144e48fa281eb8e9853e6bc1b7cc1f61b02bad
--- /dev/null
+++ b/src/main/java/Team5/SmartTowns/rewards/Sticker.java
@@ -0,0 +1,50 @@
+/*AUTHOR: Gabriel Copat*/
+package Team5.SmartTowns.rewards;
+
+import lombok.Data;
+
+import java.io.File;
+import java.util.Objects;
+
+@Data
+public class Sticker {
+    /* Stickers are trade-able rewards, they vary in rarity and are earned at random */
+
+    int id;
+    String name;
+    String description;
+    String imgPath;
+    int rarity; //1-5
+
+    public Sticker(int id, String name, String description, int rarity) {
+        this.id = id;
+        this.name = name;
+        this.description = description;
+        this.rarity = rarity;
+        imgPath = findImagePath();
+    }
+
+    private String findImagePath(){
+        /* Finds the image in the Path folder, if image is not found assigns default image */
+        String imgPath = "images/rewards/stickers/" + id + ".jpg";
+        String notFoundPath = "images/rewards/stickers/0.jpg";
+
+        File imgFile = new File("src/main/resources/static/" + imgPath);
+        return imgFile.exists() ? imgPath : notFoundPath;
+    }
+
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        Sticker sticker = (Sticker) o;
+        return id == sticker.id && Objects.equals(name, sticker.name);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(id, name);
+    }
+}
+
diff --git a/src/main/java/Team5/SmartTowns/users/User.java b/src/main/java/Team5/SmartTowns/users/User.java
new file mode 100644
index 0000000000000000000000000000000000000000..d93b4f8e6195dd5af000ad21cd901d7a87bc6a3e
--- /dev/null
+++ b/src/main/java/Team5/SmartTowns/users/User.java
@@ -0,0 +1,18 @@
+package Team5.SmartTowns.users;
+
+import Team5.SmartTowns.rewards.Badge;
+import Team5.SmartTowns.rewards.Sticker;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class User {
+
+    String email; //Validation would be done by email, since they will have that
+
+
+    Map<Badge, Integer> badgeProgress = new HashMap<>(); // Demonstrates the progress towards a specific badge (0-100)
+    Map<Sticker, Boolean> hasStickers = new HashMap<>(); // True if User has sticker (key)
+
+
+}