---
# System prepended metadata

title: Note taking App Features

---

# Note taking App Features

## Breakdown 

### Features / ideas
+ Create and edit text based notes
+ Attach photos/videos
+ Caputure hand drawn sketches
+ Password-protect sensitive notes
+ Sync app data to Dropbox i cloud or Google drive

### Functional Requirements
+ We need to build a note-taking app
+ Users can create and edit text-based notes
+ A note may also include images or hand-drawn sketches
+ Notes schould be password-protected for privacy
+ The app automatically uploads changes to cloud storage services (Dropbox, iCloud and Google Drive)

### Non functional Requirments
+ The App schould be easy to use and intuitive
+ The App must run on the lastest iOS
+ The App should handle  a large number of notes without crashing
+ The App must be secure to protect users privacy
+ The App must include the support email and the link to the apps website


## User Stories

#### Epic 1 - Note creating/editing
We need to build a note taking app. Users can create an eddit text-based notes. A note may also include images or hand-drawn sketches.

#### Epic 2 - privacy
Sensitive notes can be protected from prying eyes using a password

#### Epic 3 - Syncing to cloud server
The app automatically uploads changes to pre configured servers. We schould support all major platforms: Dropbox, iCloud and Gooogle Drive

##### Epic 1
As a user, I want to create and edit notes so that I can quickly jot down my thoughts
As a user, I want to attach photos to a note so that I can keep my memories in one place
As a user, I want to add handwritten sketches so that i can insert funny toons into my notes

##### Epic 2
As a users, I want to create private notes so that only I can access them.
As a user, I want to protect my sensitive notes with a password

##### Epic 3
As a users, I want to sync my notes across my iOS devices so that my data is up-to-date on all of them
As a user, I want to my notes automatically uploaded to cloud servers (Dropbos, Google Drive, iCloud) so that I have a backup of all my data.


```plantuml
left to right direction
title Epic 1 - Note creating/editing 
actor User

User -- (CreateNote)
User -- (EditNote)
(CreateNote) ..> (AttachPhoto) :"<<include>>"
(CreateNote) ..> (AddHandwrittenSketch) :"<<include>>"
(EditNote) ..> (AttachPhoto) :"<<include>>"
(EditNote) ..> (AddHandwrittenSketch) :"<<include>>"

```

```plantuml
left to right direction
title Epic 2 - Privacy
actor User
User -- (Create Note)
(Create Note) ..> (Create Private Note) :"<<extend>>"
(Create Private Note) ..> (Protect with Password) :"<<includes>>"
```
```plantuml
left to right direction
title Syncing to cloud server
actor User
actor CloudServer
User -- (CreateNote)
User --(EditNote)
(CreateNote) -- CloudServer :upload
(EditNote) -- CloudServer :upload
```

```plantuml
!define DARKBLUE
!includeurl https://raw.githubusercontent.com/Drakemor/RedDress-PlantUML/master/style.puml

left to right direction
class Note{
+note:String
+photo: List<Image>
+sketches: List<Sketch>
+setText():String
+getText():String
+addImage(Image: Image)
+getImage():List<Image>
+addSketch(sketch:Sketch)
+retrieveAllSketch(): List<Sketch>
}
class Image{}
class Sketch{}
class SecureNote{
passwordHash: String
}
class Crypto{
+hash(input: String): String
}
interface LocalPresistence{
..<<Interface>>..
+getNotes():List<Note>
+save(note: Note)
+update(note: Note)
+delete(note: Note)
}
class FileManager{}

Note -- Image
Note -- Sketch
SecureNote -left-- Note
SecureNote .. Crypto
LocalPresistence <.. FileManager


```

```plantuml
@startuml
!define DARKBLUE
!includeurl https://raw.githubusercontent.com/Drakemor/RedDress-PlantUML/master/style.puml

participant aView
participant aController
participant aNote

aView -> aController: on Create Note
activate aController
aController --> aNote: new Note
deactivate aController
aView -> aController: onSaveNote
activate aController
aController -> aFileManager: save(note:Note)
deactivate aController
activate aFileManager
aController -> anOnlineManager: upload(note: Note)
activate anOnlineManager
aController <<-- aFileManager: save result
deactivate aFileManager
aController <<-- anOnlineManager: upload(note: Note)
deactivate anOnlineManager
@enduml
```
