diff --git a/frontend/allowance-planner-v2/src/app/pages/allowance/allowance.page.ts b/frontend/allowance-planner-v2/src/app/pages/allowance/allowance.page.ts
index 546e639..fdd460d 100644
--- a/frontend/allowance-planner-v2/src/app/pages/allowance/allowance.page.ts
+++ b/frontend/allowance-planner-v2/src/app/pages/allowance/allowance.page.ts
@@ -14,19 +14,6 @@ import { ViewWillEnter } from '@ionic/angular';
 })
 export class AllowancePage implements ViewWillEnter {
   private id: number;
-  // Move to add/edit page later
-  private possibleColors: Array<string> = [
-    '#6199D9',
-    '#D98B61',
-    '#DBC307',
-    '#13DEB5',
-    '#7DCB7D',
-    '#CF1DBD',
-    '#F53311',
-    '#2F00FF',
-    '#098B0D',
-    '#1BC2E8'
-  ];
   public allowance$: BehaviorSubject<Array<Allowance>> = new BehaviorSubject<Array<Allowance>>([]);
 
   constructor(
@@ -76,4 +63,8 @@ export class AllowancePage implements ViewWillEnter {
   createAllowance() {
     this.router.navigate(['add'], { relativeTo: this.route });
   }
+
+  updateAllowance(id: number) {
+    this.router.navigate(['edit', id], { relativeTo: this.route });
+  }
 }
diff --git a/frontend/allowance-planner-v2/src/app/pages/edit-allowance/edit-allowance.module.ts b/frontend/allowance-planner-v2/src/app/pages/edit-allowance/edit-allowance.module.ts
index b846a08..babc77f 100644
--- a/frontend/allowance-planner-v2/src/app/pages/edit-allowance/edit-allowance.module.ts
+++ b/frontend/allowance-planner-v2/src/app/pages/edit-allowance/edit-allowance.module.ts
@@ -1,6 +1,6 @@
 import { NgModule } from '@angular/core';
 import { CommonModule } from '@angular/common';
-import { FormsModule } from '@angular/forms';
+import { FormsModule, ReactiveFormsModule } from '@angular/forms';
 
 import { IonicModule } from '@ionic/angular';
 
@@ -13,7 +13,8 @@ import { EditAllowancePage } from './edit-allowance.page';
     CommonModule,
     FormsModule,
     IonicModule,
-    EditAllowancePageRoutingModule
+    EditAllowancePageRoutingModule,
+    ReactiveFormsModule
   ],
   declarations: [EditAllowancePage]
 })
diff --git a/frontend/allowance-planner-v2/src/app/pages/edit-allowance/edit-allowance.page.html b/frontend/allowance-planner-v2/src/app/pages/edit-allowance/edit-allowance.page.html
index d4d37b4..43ff437 100644
--- a/frontend/allowance-planner-v2/src/app/pages/edit-allowance/edit-allowance.page.html
+++ b/frontend/allowance-planner-v2/src/app/pages/edit-allowance/edit-allowance.page.html
@@ -1,13 +1,31 @@
 <ion-header [translucent]="true">
   <ion-toolbar>
-    <ion-title>edit-allowance</ion-title>
+    <div class="toolbar">
+      <ion-title *ngIf="isAddMode">Create Goal</ion-title>
+      <ion-title *ngIf="!isAddMode">Edit Goal</ion-title>
+    </div>
   </ion-toolbar>
 </ion-header>
 
 <ion-content [fullscreen]="true">
-  <ion-header collapse="condense">
-    <ion-toolbar>
-      <ion-title size="large">edit-allowance</ion-title>
-    </ion-toolbar>
-  </ion-header>
+  <form [formGroup]="form">
+    <label>Goal Name</label>
+    <input id="name" type="text" formControlName="name"/>
+
+    <label>Target</label>
+    <input id="target" type="number" placeholder="0.00" name="price" min="0" value="0" step="0.01" formControlName="target"/>
+
+    <label>Weight</label>
+    <input id="weight" type="number" placeholder="0.00" name="price" min="0" value="0" step="0.01" formControlName="weight"/>
+
+    <label>Colour</label>
+    <select formControlName="color">
+      <option *ngFor="let color of possibleColors" [value]="color" [style.--background]="color">{{color}}</option>
+    </select>
+
+    <button type="button" [disabled]="!form.valid" (click)="submit()">
+      <span *ngIf="isAddMode">Add Goal</span>
+      <span *ngIf="!isAddMode">Update Goal</span>
+    </button>
+  </form>
 </ion-content>
diff --git a/frontend/allowance-planner-v2/src/app/pages/edit-allowance/edit-allowance.page.scss b/frontend/allowance-planner-v2/src/app/pages/edit-allowance/edit-allowance.page.scss
index e69de29..3fee56e 100644
--- a/frontend/allowance-planner-v2/src/app/pages/edit-allowance/edit-allowance.page.scss
+++ b/frontend/allowance-planner-v2/src/app/pages/edit-allowance/edit-allowance.page.scss
@@ -0,0 +1,45 @@
+.toolbar {
+    display: flex;
+}
+
+form {
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    height: 100%;
+}
+
+label {
+    color: var(--ion-color-primary);
+    margin-top: 25px;
+    margin-bottom: 10px;
+}
+
+input,
+select {
+    border: 1px solid var(--ion-color-primary);
+    border-radius: 5px;
+    width: 250px;
+}
+
+option {
+    --background: white;
+    background-color: var(--background);
+    color: var(--background);
+    font-family: var(--ion-font-family);
+}
+
+button {
+    background-color: var(--ion-color-primary);
+    border-radius: 5px;
+    color: white;
+    padding: 10px;
+    width: 250px;
+    margin-top: auto;
+    margin-bottom: 50px;
+}
+
+button:disabled,
+button[disabled]{
+    opacity: 0.5;
+}
\ No newline at end of file
diff --git a/frontend/allowance-planner-v2/src/app/pages/edit-allowance/edit-allowance.page.ts b/frontend/allowance-planner-v2/src/app/pages/edit-allowance/edit-allowance.page.ts
index fceee05..81f7c55 100644
--- a/frontend/allowance-planner-v2/src/app/pages/edit-allowance/edit-allowance.page.ts
+++ b/frontend/allowance-planner-v2/src/app/pages/edit-allowance/edit-allowance.page.ts
@@ -1,4 +1,7 @@
 import { Component, OnInit } from '@angular/core';
+import { FormBuilder, FormGroup, Validators } from '@angular/forms';
+import { ActivatedRoute, Router } from '@angular/router';
+import { AllowanceService } from 'src/app/services/allowance.service';
 
 @Component({
   selector: 'app-edit-allowance',
@@ -7,10 +10,66 @@ import { Component, OnInit } from '@angular/core';
   standalone: false
 })
 export class EditAllowancePage implements OnInit {
+  public form: FormGroup;
+  public goalId: number;
+  public userId: number;
+  public isAddMode: boolean;
+  public possibleColors: Array<string> = [
+    '#6199D9',
+    '#D98B61',
+    '#DBC307',
+    '#13DEB5',
+    '#7DCB7D',
+    '#CF1DBD',
+    '#F53311',
+    '#2F00FF',
+    '#098B0D',
+    '#1BC2E8'
+  ];
 
-  constructor() { }
+  constructor(
+    private route: ActivatedRoute,
+    private formBuilder: FormBuilder,
+    private allowanceService: AllowanceService,
+    private router: Router
+  ) {
+    this.userId = this.route.snapshot.params['id'];
+    this.goalId = this.route.snapshot.params['goalId'];
+    this.isAddMode = !this.goalId;
+
+    this.allowanceService.getAllowanceList(this.userId).subscribe((list) => {
+      for (let allowance of list) {
+        this.possibleColors = this.possibleColors.filter(color => color !== allowance.colour);
+        if (!this.isAddMode && this.goalId === allowance.id) {
+          this.possibleColors.unshift(allowance.colour);
+        }
+      }
+    });
+
+    this.form = this.formBuilder.group({
+      name: ['', Validators.required],
+      target: ['', Validators.required],
+      weight: ['', Validators.required],
+      color: ['', Validators.required]
+    });
+  }
 
   ngOnInit() {
   }
 
+  submit() {
+    const formValue = this.form.value;
+    const allowance = {
+      name: formValue.name,
+      target: formValue.target,
+      weight: formValue.weight,
+      colour: formValue.color,
+    };
+
+    if (this.isAddMode) {
+      this.allowanceService.createAllowance(allowance, this.userId);
+    }
+
+    this.router.navigate(['/tabs/allowance', this.userId]);
+  }
 }
diff --git a/frontend/allowance-planner-v2/src/app/pages/edit-task/edit-task.page.html b/frontend/allowance-planner-v2/src/app/pages/edit-task/edit-task.page.html
index 52eb693..3d9ee5c 100644
--- a/frontend/allowance-planner-v2/src/app/pages/edit-task/edit-task.page.html
+++ b/frontend/allowance-planner-v2/src/app/pages/edit-task/edit-task.page.html
@@ -18,7 +18,7 @@
     <input id="name" type="text" formControlName="name"/>
 
     <label>Reward</label>
-    <input id="name" type="number" placeholder="0.00" name="price" min="0" value="0" step="0.01" formControlName="reward"/>
+    <input id="reward" type="number" placeholder="0.00" name="price" min="0" value="0" step="0.01" formControlName="reward"/>
 
     <label>Assigned</label>
     <select formControlName="assigned">
diff --git a/frontend/allowance-planner-v2/src/app/services/allowance.service.ts b/frontend/allowance-planner-v2/src/app/services/allowance.service.ts
index a32538a..c84189b 100644
--- a/frontend/allowance-planner-v2/src/app/services/allowance.service.ts
+++ b/frontend/allowance-planner-v2/src/app/services/allowance.service.ts
@@ -14,4 +14,8 @@ export class AllowanceService {
     getAllowanceList(userId: number): Observable<Array<Allowance>> {
         return this.http.get<Allowance[]>(`${this.url}/user/${userId}/allowance`);
     }
+
+    createAllowance(allowance: Partial<Allowance>, userId: number) {
+        this.http.post(`${this.url}/user/${userId}/allowance`, allowance).subscribe();
+    }
 }
\ No newline at end of file