diff --git a/libs/features/budgetting/budgets/src/lib/budget-table/budget-table.component.html b/libs/features/budgetting/budgets/src/lib/budget-table/budget-table.component.html
new file mode 100644
index 00000000..c7871f55
--- /dev/null
+++ b/libs/features/budgetting/budgets/src/lib/budget-table/budget-table.component.html
@@ -0,0 +1,6 @@
+
+
+ | {{ budget.name }} |
+ {{ budget.amount }} |
+
+
diff --git a/libs/features/budgetting/budgets/src/lib/budget-table/budget-table.component.ts b/libs/features/budgetting/budgets/src/lib/budget-table/budget-table.component.ts
new file mode 100644
index 00000000..3babe339
--- /dev/null
+++ b/libs/features/budgetting/budgets/src/lib/budget-table/budget-table.component.ts
@@ -0,0 +1,10 @@
+import { Component, Input, Signal } from '@angular/core';
+import { Budget } from '../../models/budget.model';
+
+@Component({
+ selector: 'app-budget-table',
+ templateUrl: './budget-table.component.html',
+})
+export class BudgetTableComponent {
+ @Input() budgets!: Signal;
+}
diff --git a/libs/features/budgetting/budgets/src/lib/select-budget-page/select-budget-page.component.html b/libs/features/budgetting/budgets/src/lib/select-budget-page/select-budget-page.component.html
new file mode 100644
index 00000000..389591de
--- /dev/null
+++ b/libs/features/budgetting/budgets/src/lib/select-budget-page/select-budget-page.component.html
@@ -0,0 +1,3 @@
+
diff --git a/libs/features/budgetting/budgets/src/lib/select-budget-page/select-budget-page.component.ts b/libs/features/budgetting/budgets/src/lib/select-budget-page/select-budget-page.component.ts
new file mode 100644
index 00000000..f4347eb0
--- /dev/null
+++ b/libs/features/budgetting/budgets/src/lib/select-budget-page/select-budget-page.component.ts
@@ -0,0 +1,31 @@
+import { Component, inject, signal, computed, effect } from '@angular/core';
+import { BudgetService } from '../../services/budget.service';
+import { Budget } from '../../models/budget.model';
+
+@Component({
+ selector: 'app-select-budget-page',
+ templateUrl: './select-budget-page.component.html',
+})
+export class SelectBudgetPageComponent {
+ private budgetService = inject(BudgetService);
+
+ allBudgets = signal([]);
+ selectedBudgetId = signal(null);
+
+ overview = computed(() =>
+ this.allBudgets().find(b => b.id === this.selectedBudgetId())
+ );
+
+ constructor() {
+ this.loadBudgets();
+ }
+
+ loadBudgets() {
+ this.budgetService.getBudgets().subscribe(budgets => this.allBudgets.set(budgets));
+ }
+
+ selectBudget(budgetId: string) {
+ this.selectedBudgetId.set(budgetId);
+ }
+}
+
diff --git a/libs/model/budgetting/budget-notes/src/lib/domain/add-note.command.ts b/libs/model/budgetting/budget-notes/src/lib/domain/add-note.command.ts
new file mode 100644
index 00000000..b1cffa49
--- /dev/null
+++ b/libs/model/budgetting/budget-notes/src/lib/domain/add-note.command.ts
@@ -0,0 +1,7 @@
+export class AddNoteToBudgetCommand {
+ constructor(
+ public readonly budgetId: string,
+ public readonly content: string,
+ public readonly createdBy: string,
+ ) {}
+}
diff --git a/libs/model/budgetting/budget-notes/src/lib/domain/add-note.handler.ts b/libs/model/budgetting/budget-notes/src/lib/domain/add-note.handler.ts
new file mode 100644
index 00000000..1820b78c
--- /dev/null
+++ b/libs/model/budgetting/budget-notes/src/lib/domain/add-note.handler.ts
@@ -0,0 +1,25 @@
+import { AddNoteToBudgetCommand } from './add-note.command';
+import { FunctionHandler } from '@ngfire/functions';
+
+export interface ICommandHandler {
+ execute(command: TCommand): Promise;
+}
+
+export class AddNoteToBudgetHandler implements FunctionHandler, ICommandHandler {
+ async execute(command: AddNoteToBudgetCommand): Promise {
+ if (!command.content || !command.budgetId) {
+ throw new Error('Budget ID and content are required');
+ }
+
+ const repo = this.getRepository();
+ await repo.addNote(command.budgetId, command.content, command.createdBy);
+ }
+
+ private getRepository() {
+ return {
+ addNote: async (budgetId: string, content: string, createdBy: string) => {
+ // logic to persist the note
+ }
+ };
+ }
+}