\ No newline at end of file
diff --git a/frontend/src/app/pages/signin/signin.component.scss b/frontend/src/app/pages/signin/signin.component.scss
new file mode 100644
index 0000000..a8d5b3d
--- /dev/null
+++ b/frontend/src/app/pages/signin/signin.component.scss
@@ -0,0 +1,82 @@
+:host {
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ padding: 1em;
+
+ form {
+ width: 80%;
+ max-width: 20em;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ gap: 1em;
+ box-shadow: 0 2px 5px 0 rgba(0,0,0,.16),0 2px 10px 0 rgba(0,0,0,.12);
+ border-radius: .5em;
+ padding: 1em 1.5em;
+ background-color: #ffffff;
+
+ h1 {
+ margin: 0;
+ }
+
+ div {
+ display: flex;
+ flex-direction: column;
+ position: relative;
+ gap: .1em;
+
+ mat-icon {
+ position: absolute;
+ top: 1.3em;
+ left: .5em;
+ color: #777;
+ }
+
+ &.actions {
+ flex-direction: row-reverse;
+ justify-content: space-between;
+ align-items: center;
+
+ button {
+ padding: .8em 1.2em;
+ border-radius: 10em;
+ border: none;
+ background-color: #3f51b5;
+ color: white;
+ transition: background-color .2s ease-in-out;
+
+ &:hover {
+ background-color: #5b6ed8;
+ cursor: pointer;
+ }
+ }
+
+ a {
+ color: #3f51b5;
+ text-decoration: none;
+ }
+ }
+
+ label {
+ flex: 1;
+ font-style: italic;
+ padding-left: 1em;
+ color: #777;
+
+ .required {
+ color: red;
+ }
+ }
+
+ input {
+ flex: 1;
+ background-color: #eeeeee;
+ border: none;
+ border-radius: 10em;
+ padding: 1em 1em 1em 3em;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/frontend/src/app/pages/signin/signin.component.spec.ts b/frontend/src/app/pages/signin/signin.component.spec.ts
new file mode 100644
index 0000000..b0892f5
--- /dev/null
+++ b/frontend/src/app/pages/signin/signin.component.spec.ts
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { SigninComponent } from './signin.component';
+
+describe('SigninComponent', () => {
+ let component: SigninComponent;
+ let fixture: ComponentFixture