The Official Internal Nacdlow Wiki

Note: This is an internal wiki we used between our six team members during the development process of the project. We have redacted some parts to protect the privacy of others.

Welcome to the official wiki for Nacdlow. Please visit the news page to find out what's new, and feel free to post there.

Our current goal: Implement core features and functionality of app.

Important External Links

Current Relevant Information

Please email Humaid when you finished surveying a subject using this link: [redacted]


The latest post is on top.

Feel free to add a post below, make sure you follow the format of the rest of the document.

Entry 7

Post by: Humaid at 3:04pm, 1st November

I have added a Golang tutorial section on the wiki. I am not expecting anyone to do this now, but it would be great if we could find some time so we can get together and do these exercises.

Entry 6

Post by: Humaid at 1:55pm, 16th October

This is a test post to demonstrate CI!

Entry 5

Post by: Humaid at 8:03pm, 14th October

The wiki is now hosted at You have to be logged in to GitLab to view the site, as it is protected.

Be mind that the wiki takes about 2-3 minutes to update after each commit. Also there is a dark mode available!

Entry 4

Post by: Humaid at 5:53pm, 14th October

We have bought a domain (! The domain cost was 6.56 pounds, so if you want to voluntarily pay your part you can pay 1 pound, but it is optional.

Right now, we don't have a website up. But email aliases is set, and each member has an address which is aliased to their University email.

And there is a general email ([email protected]) which will forward to all members.

Entry 3

Post by: Humaid at 5:50pm, 13th October

PDFs are now auto-compiled for the docs project, and it is no longer included with the repository (gitignore'd). This simplifies the process and reduces the size of the repository (no more binary blobs). You can view the generated PDFs online by clicking the (browse artifacts) badge.

Go to docs repo

Entry 2

Post by: Humaid at 4:54pm, 13th October

The Go wiki is up, doesn't have much yet. It is generated by the script, which you can look at and improve upon. If you want to run it you need godoc2markdown to be installed on your computer.

Entry 1

Post by: Humaid at 4:09pm, 13th October

The "source" repository is renamed to "nacdlow-server". To update your remote URL, 'cd' into your local git repository for 'source' and run:

$ git remote set-url origin [email protected]:group-nacdlow/nacdlow-server.git

Members directory

Note: The roles of the members are not a limiting factor of what the member could or could not do.

This page used to list the members including their roles, emails, usernames, course, and what they are good at. This has been since redacted.

Questions and Answers


How do I commit/push my changes?

First you have to stage the files you want to commit.

$ git add [files...]

Or you can stage all files.

$ git add .

You can double-check and see which files you staged.

$ git status

Now after everything is staged, you are ready to commit the changes.

$ git commit -m "Your commit message here"

Now that you have your changes committed, you can push it.

$ git push

Or sometimes you have to specify the remote/branch explicitly.

$ git push origin master

How do I pull the changes?

Simply run:

$ git pull

Or to specify it more explicitly.

$ git pull origin master

I have a conflict, what to do??

If the conflict cannot be automatically merged (non-fast-forward), you can go in the affected files and merge the changes yourself. Your changes and the origin's changes will be marked, you can remove the marking, and merge it manually.

After manually merging the file, you can simply stage your changes, and commit (note that you don't need to provide a commit message).

$ git add .
$ git commit
# [An editor will appear, simply exit it]
$ git push

How do I use 'git X'

Simply run

$ git help X

Where X is the command you may want to understand. A man page will show up with all the different options, and examples.

I tried to commit, and nano/vim opened. What to do?!

You probably forgot to specify a commit message, simply type your commit message and exit. This also happens when you intentionally leave out the commit message when merging commits, or after an automatic merge. In that case you can exit by :qEnter in Vim, or Ctrl+X with nano. Otherwise;

If it is vim, you'll have to enter INSERT mode before typing by pressing i, then you can type. After you are done, simply press Esc to go back to NORMAL mode, then to save and exit, type :wqEnter.

Otherwise, with nano simply type directly, and press Ctrl+X followed by a Y.

I want to tag my current commit as version X, how do I do that?

Let's say you want to tag the current commit as v0.1, we type

$ git tag v0.1

To push (or pull) the tag, you have to include --tags with your push command

$ git push --tags

And the tag will appear on GitLab.

To delete a tag, simply do

$ git tag -d v0.1

How do I do branching?

Check out the documentation on Git Branching Basics, which provides explanations with diagrams.

Where are good resources on Git?

Check out git-scm docs, which goes in-depth in many aspects of the git tool.

Also check out Oh Shit, Git!?!, you'll need it when you screw up your repo :).

I did something, and I want to force push a commit, but it isn't allowing me. What to do?

GitLab doesn't allow force pushes by default (unlike GitHub), this prevents people from accidentally pushing a corrupted or old repository accidentally to origin.

You will probably have to clone a fresh repository, and salvage the changes from the previous repository manually. This prevents us from corrupting the origin repository.


Where can I learn more about LaTeX?

Wikibooks has one of the best documentations on LaTeX. Another nice site is the LaTeX page on Learn X in Y Minutes, which walks you through a document source.

What other things should I learn?

Diagrams are made with PlantUML, which is written in a very minimal format. You can check out examples on their main website.

How do I convert a .tex file into a .pdf?

You need LaTeX installed on your computer, then you can run the command

$ pdflatex file.tex

where file is the name of the file. It will produce a .pdf file with the same name.

What are those .aux and .toc files?

Those files are automatically generated by LaTeX, you should ignore them.

How do I create a .png file from a PlantUML document?

You need to install PlantUML on your system, then simply run

$ plantuml diagram.txt -o diagram.png

Where diagram.png would be your output image file.


How do I build a binary file?

Make sure you are in the root directory of the Go project, and run

$ go build

Or to directly run the project

$ go run main.go

How do I format the files?

Simply run

$ go fmt ./...

Note the three dots, this recursively formats files in the project tree.

To find issues, run the vet

$ go vet ./...

How to run the unit tests?

To run all unit tests, simply run

$ go test ./...

I want to use a new library, how can I import it?

You can just add it in the package imports section on the top of the Go file you want to use it in. With Go Modules enabled, this should be automatically downloaded when you try to use go run or go build.

Otherwise, you can run

$ go get ./...

Where can I learn more about Golang?

Going through the Golang Tour is a great way to learn the language, you could also try to solve some problems on Project Euler, which would also strengthen your programming skills in general.

Learn X in Y Minutes have their dedicated page on Golang too!

How is the directory structure organised.

Check out the Go project structure in the Main Style Guide.

Where are the documentations for the libraries used?


XORM is the Object-Relational Mapping library we are using, this automatically hooks up with any database engine (PostgreSQL/SQLite/MySQL, or even MSSQL.. ew). This engine automatically generates the schema, and syncs the database. It also does the heavy-lifting for CRUD queries. You can check the documentation on their website.


Macaron (or Go-Macaron) is a minimal web framework for Go, do note that this library relies on Go's built-in net/http library on many things, such as templating, and the framework is just a middleware between you and the net/http library. So it is important to know what is provided by the built-in library or Macaron, so you can find the appropriate documentation.

Usually if it relates to these points, it is a Macaron thing:

  • Routing (and parameters in URLs)
  • Templating (built on top of Golang's templating, so it is mostly identical)
  • Data binding (forms bound to structs)
  • Sessions and cache
  • Captchas and CSRF protection

Check out Macaron's wiki as it contains really helpful information, and it will be used very frequently as a reference, just like XORM's docs.

Urfave's CLI library

To keep the command-line usage of the program neat and simple, we use urfave's cli library. This allows us to have multiple command-line commands, with flags and options, in a neat way. This is very simple, and usually just setup a couple of times when adding new commands in the beginning of the project's life-cycle.

BurntSushi's TOML

We use BurntSushi's TOML library for handling TOML files. We use the TOML as the configuration file format, you can check out TOML's language spec. It is supposed to be better than YAML and INI (also, ew) format.


To help with writing unit tests, we use the testify unit testing library which simplifies the testing. Although Go provides a testing library, it does not have assertions. This library provides them, among other things, such as data mocking with its mock package, among other things.

Other libraries

If there are other libraries, you can check them. A good tool is the go doc command-line tool, also a better tool is the GoDoc website, you can simply enter any package and it will download it, and preview a web documentation.

It is important to also be aware of Go's built-in library, as it is really powerful.

A nice website for discovering libraries is Go Awesome, it is also a source of inspiration.

Learning by example

A project called Gitea is one of the main inspirations of this projects layout, and it uses the same libraries listed above. You can learn by checking out Gitea's source code, as it is done and structured similarly to our project.

General programming

How do I run Makefiles?

To run Makefiles you need GNU Make installed on your system. Then you are able to use the make command, which will run the Makefile in the current directory.

Makefiles may have multiple rules, such as clean, build, or all to run all rules (and produce a target). Consult the README file of the project, which would list the appropriate make commands for different scenarios.
Usually, you would run a command like

$ make all

Usually, Makefiles are simple and don't require modification once things are set.

What editor/IDE should I use?

Use whatever you like.

If you are here for some recommendations, then:

  • Visual Studio Code (currently trendy, but has poor speed performance)
  • [neo]vim and emacs (has a learning curve, but pays off in the long run)
  • Jetbrain's GoLand (made by same company who made IntelliJ)
  • Geany (a good lightweight alternative to VS Code and other Electron-based editors)

Do I need to use Linux?

Using Linux (or most Unix-based/like systems, this includes macOS) will help with development, as the tools can be run locally. Unlike with Windows, you may need to work-around with Windows Subsystem for Linux (WSL) or Cygwin, which might not work as expected like on a proper Unix system. Although it is not necessary, especially with organisational roles.

How to get Linux?

Ubuntu is a popular Linux distribution, which is easy to install and has a lot of online support.

Which programs should I have installed on my system?

You should have these packages installed on your system:

  • git: For version control.
  • LaTeX: For document typesetting.
  • GNU Make: For build automation.
  • Go: The programming language.
  • PlantUML: For diagram generation.

Other programs worth installing:

  • A database server, such as PostgreSQL or MariaDB
  • zathura: A minimal PDF viewer which reloads files automatically when updated.
  • sxiv: A minimal image viewer which reloads images automatically when updated.

How do I get a fancy badge?

You can get one at, and add it in Settings>General>Badges on GitLab project or group.

Do note that our repositories are private, so shields will not be able to view the statistics of our projects.

My CI build failed, how do I undo it?

There is no need to undo anything. Simply figure out why the CI build failed, it could be due to formatting or compilation issue. Make sure you run make to format and test the project before committing and pushing to GitLab.

But it happens sometimes, and it is fine. This is the reason why we have CI.


This page will contain all shared account credentials of the team.

Stripe (Demo) account

Username: [redacted]
Password: [redacted]

Darksky API Key

For Darksky, we use this API key: [redacted]. You will have to set this in your config.toml.

This key has a limit of 1,000 requests per day.

TeamGantt account

Stage 1

Username: [redacted]
Password: [redacted]

Link to project page/login

Stage 2

Username: [redacted]
Password: [redacted]

Stage 3

Username : [redacted] Password: [redacted]

Due to TeamGantt restriction on free accounts, the rest of the team will be sharing this account.

Golang Tutorial

This is a tutorial for Go, you'll need to have Go installed. You can do this by using the package manager on your computer or by downloading it from Go's website.

The only way to learn a programming language is to make a little project, no one ever learns a language just by reading a book or watching an hour long tutorial on YouTube.

This is why this guide will not teach you how to write Go code, but will suggest a couple of exercies you could do.

Exercise 1: Project Euler

Project Euler is a site which contains a series of mathematical and computational problems which you can solve by writing a program in any language. It can be fun and challenging.

You have to register an account on the website so you can check your answers.

Goal: Write programs to solve the first 10 problems in Go.

Exercise 2: Jamie is alive

In this exercise, we will do Jamie's coursework but in Go instead of ML/Python.

Since you have probably done them before, it should be simple especially when using the old code as reference.

1. Complex number arithmetic

Implement a cadd and cmult function in Go, you can use the complex type. These two functions should return type complex.

For example:

comp := complex(1, -2) // this is 1+2i
fmt.Println(real(comp)) // this prints 1

2. Sequence arithmetic

Consider an integer array. Implement recursive functions seqadd and seqmult which takes in []int and returns []int.

For instance:

// returns []int{0,4,5}

Note: Do not write error handling code.

3. Matrices

Now the fun part! You should implement the following functions:

  • isMatrix([][]int) bool: Whether the 2d array of integers represents a matrix (when the length of each row is equal).
  • matrixShape([][]int) (int, int): Should return two integers, the number of columns and number of rows (in that order).
  • matrixAdd([][]int, [][]int) [][]int: Matrix addition, which is a simply a pointwise addition.
  • A challenge matrixMult([][]int, [][]int) [][]int: Matrix multiplication.

Helpful links:

LaTeX Documentation

This is the documentation for our LaTeX documents.

Full LaTeX documentation is available on Wikibooks

This document will cover our custom LaTeX macros and style.


There is a custom macro just for our documentation which allows us to easily add images to the files. Here is an example:

\mkimg{0.5}{test.png}{A test image}{test}

The order of arguments is as follows: width, filename, caption, figure reference. Note that the last argument will not show on the document, but the figure can then be referenced. For the example above, you can reference it like:

See figure \ref{fig:test} on the page \pageref{fig:test} for an example.

However, you do not have to reference the page.

Technical section.

Profiling iglü server

iglü server has a profiler running by default, which you may check at[:8080]/debug/pprof/.

You may use go tool pprof to further analyse this, generating a graph of all function calls and how long they take. You will need graphviz package installed on your system to do this.

Running the profiler

  1. Compile the server using make (don't use go run!).
  2. Run the server ./nacdlow-server run
  3. Do whatever you want, use the features you want to be profiled.
  4. Once you are done, run go tool pprof nacdlow-server
  5. You'll get a pprof shell, type web to run the web interface (this is different than the previous!).
  6. View the profiler graph on the browser!

Style Guide section.

Main Style Guide

The following is the main technologies which we are going to use.

  • Language: Go
  • Database: XORM
  • Version control: Git + GitLab
  • Project management: GitLab Boards + Issues + Milestones

The WhatsApp group shall be the media for messaging. Email may also be used, so email must be checked at least once a day.

The GitLab group shall contain all of the following:

  • Code source
  • Project documentation
  • Issue and milestone tracking
  • Continuous integration (auto-builds)
  • Wiki (such as this one)
  • Reports
  • Software development process management (scrum/kanban/etc)

Software Development Process

The project shall follow the Kanban methodology in the software development process.

Tasks, ideas, and bugs shall all be listed in the issue tracker, and the issue board shall be used as a Kanban board.

The following labels shall be created:

  • Bug: For bugs, and unexpected behaviour.
  • Feature: For features.
  • Won't fix: Things which will not be fixed or added.
  • Enhancement: Enhancements to the project.

Other labels would be created for progress in the Kanban board:

  • Must have: To-do, with Must priority.
  • Should have: To-do with Should priority.
  • In Progress: Work in progress.
  • Refinement & Testing: Function in testing and refinement phase.

Complete issues are marked close.

Decision Making

If a decision couldn't be reached by consensus, each member shall have a turn to voice their opinion on the matter, then a vote shall be held by show of hands.

Votes can only be held in meetings which are pre-scheduled, and members absent from the meeting aren't able to vote.

The leader may have a second vote in the case of a tie.

Changes to this style guide must be approved by a vote.


Meetings shall be scheduled, at least once a week, to discuss the project, follow up on design choices, brainstorm, etc.

Meetings shall be scheduled in a way which fits the schedule of all the members, but this shall not be used as an excuse to not hold a meeting.

Meetings are recorded (consent must be taken each time), and must be released in a way accessible by the members. Recordings are recorded and uploaded by the designated recorder in the team, or by another team member if the designated recorder is not available during that meeting.

Every meeting must be announced in advanced by at least a day, a wiki page can be created for that meeting, listing the points to cover, and what is covered, and any major decision or votes which was taken.

Code Style Guide

Code commited to the Git repositories shall be properly formatted, and shall pass tests in the next stages of development.

The code shall be formatted according to the default specification of the language. If such does not exist, we shall adopt a popular code style guide for that language, and follow it strictly.

Every code repository shall contain a Makefile which allows the compilation of the program, and may include testing and formatting.

Every code repository shall contain a README file which contains the following sections:

  • Description: A brief description of the code repository, with purpose and goal.
  • Clone and Install: Instructions of cloning the repository and installing or executing the program.
  • Usage: Documentation on the usage, configuration, command-line options or environment variables used by the program.

A CHANGELOG file shall also be included, including all the tagged versions of the projects, including the changes from the previous version.

Go-specific Style Guide

All code shall be run through the following commands:

  • go fmt ./...
  • go vet ./...
  • go test ./...

And any issues arise from these commands shall be fixed before commited to the repository.

Any public function or variable shall be documented. This is optional, but recommended for private functions and variables.

Go project structure

Note: This is a new proposed section.

  • assets: Any files used by external programs run by the program (i.e. configuration file for an external generator program).
  • cmd: Contains all the command-line commands.
  • models: Contains all struct models for database, data binding/validation forms, configuration files.
  • modules: Contains sub-packages for different modules of the project, such as...
    • settings: Which contains program configuration.
    • utils: A "catch-all" module for everything and anything which doesn't fit anywhere else. :)
    • Other package modules can be created here as needed.
  • public: Any files here will be public facing for web, this is useful for hosting web assets such as JavaScript files, CSS, images, and fonts.
    • js: For JavaScript files, external libraries must be versioned. The main JS file should be called main.js.
    • css: For CSS files, external libraries must be versioned. The main CSS file should be called main.css.
  • routes: Where routes functions live, handling GET and POST requests, templates, validation, rendering pages, etc.
  • templates: Where all the HTML template files are stored.
    • base: Where base templates live, such as head and footer.

Liaison communications log

The project liaison shall keep a log of all the communications with the professors and the project manager. preferably on the wiki.

Code of Conduct

We shall follow The Lunduke Code of Conduct, which simply states:

Be Excellent to Each Other.

And that's it! Simple enough, huh?

Revisions to this document

Any changes to this document must be approved by a vote before being enforceable. All changes to this document must be logged in the revision log.

Revision log

  • rev0 (1st October 2019)
    • Initial version

Design Guide

Nacdlow Company


Design standards are not set in stone. This page is a work in progress.


HEX: #9ea0b8 HSV: 236, 14, 72 HSL: 236, 15.3%, 67%


Montserrat Extra Bold Italic

Link to zip file containing the TrueTypeFont files:

Alternatively the font may be downloaded from

Iglü App

iglü_white iglü_black


Hex: #3766FF


The logo uses a custom version of Rockwell.


Download files here (link redacted)

Brainstorming section.

Simulator logic

Time simulation

The simulated environment will start at the current time, running normal time. In the simulator app, we will be able to speed up, change, or stop the time. This will reflect Darksky's real data. The simulated home will also have a location, which is used for getting the weather data.

Weather simulation

Weather will get pulled from Darksky, which will also return an hourly forecast of the weather. This can be used in both simulating the weather, and also for the smart home app and its suggestions.

Darksky provides weather/natural disaster alerts, this data can be used. In the simulator page, you should be able to override the Darksky temperatures and values, and simulate alerts.


If a door or window is opened, the room's temperature will slowly start to match the outside temperature.

Also, this applies to temperature control. When the temperature control is running, it will slowly adjust the room temperature to the set temperature.

The temperature control is also able to "fight" with the outside weather if both windows/main door and temp control is running.

If both temperature control (heating/cooling) and windows/doors are closed, then the room temperatures will very slowly change towards the outside temperature. Also opening the windows for a minute or two can significantly drop the temperature of the rooms.

Power generation

Depending on the cloud coverage (pulled from the weather data), the power generation will vary (under the max solar power generation capacity, in the simulated home).

Power consumption

Depending on the devices running on the home, the power consumption will change. There will also be a "baseline" power consumption, which will count in fridges and other appliances. This baseline power consumption will vary depending on the time of day, based on an average home power consumption graph.

Link to all meetings recordings:
Link redacted

Link to manager meetings recordings:
Link redacted

Meetings section.

27th September Meeting


  • Setting up Git
  • Choice of languages

No decisions has been made because only three people attended this meeting. We have discussed about choice of languages, @humaid suggested that we use Go as the implementation language and offered to help teach the language. There are worries if it may be difficult for others to catch up with, and that we might plan to use something like Python.

We also had a tour of GitLab, showing the cool features with Issues, Milestones, Continuous Integration, Boards (for Kanban), and so on...

@humaid agreed to give a tour of GitLab/Git, Go, and so on, in the next meeting.

To Go or Not to Go

Care For Golang:

  • Strongly typed: Dynamic typing can cause issues further on, like is the variable id an int or a string? Companies like Dropbox are trying to type-check 4 Million lines of Python.
  • There is one way to format things. No Tabs v. Spaces flamewar, the go fmt tool automatically formats.
  • The Objection-Relational Mapping library XORM is a good ORM implementation, unlike with Django, transactions are not as straight-forward.
  • It is fast, compiled, garbage collected. So it is good from these aspects. And the syntax is similar to C.

Case Against Golang

  • We must spend time to learn yet another programming language.
  • The syntax may take time to get used to.
  • Some people might be more familiar with Python, and that is more important than the benefits we might have from Go.

1st October Meeting

The meeting will take place from 1PM to 4PM at GRG MRG.6 in the Grid building, which can be accessed from Inspire & Collaborate 2 in the ground floor.

All members should attend. Important decisions will be taken during this meeting, and we will have an interactive session to learn and setup Git, which is a tool we will use throughout the project.


  • Setting up Git & tour of GitLab (1+ hours)
  • Short tour of setting up and using LaTeX
  • Pick the team leader & confirm the roles of members
  • Hold debate around programming language (and decide on one)
  • Hold debate around style guide, and hold to vote if ready


Pre-Meeting | 1-2pm

Members who were not present last meeting were given a crash course on Git, LateX, and Gitlab by Humaid. We explored using the many useful software development features of Gitlab such as "Continuous Integration" which allows for code to compiled and tested automatically upon push to the repository.

Preliminary roles have been chosen. These are not final and will be malleable.

Humaid gave his case for using Go (Golang). It was very effective.

Ideas | 2:10:00


  • Lightbulbs
  • Blinds
  • Heating
  • Security System
    • Camera
    • Motion Sensors
  • Eco mode
  • Speakers (Echo Home/Google Assistant integration)
  • Levels (Beginner, intermediate, expert)


  • Power Usage
  • Solar panel power generation
  • Battery level of battery
  • Adjusting heating based on weather
  • Turning lights on and off based on motion
  • Learns your activity

Selling Points

  • Transparency
  • Security
  • Privacy
  • Ease of use
  • Prediction on usage
  • Budgeting
  • Scheduling electricity usgae based on electricity costs vs time
  • Modules section
  • Convert old homes
  • Tips n' tricks
  • Accessibility (for those with disabilities)
  • Fire alarm per room
  • Integrate country based emergency broadcast notifications


  • Make mock-ups for what you think the app should look like
    • This doesn't have to be professional, just throw ideas around, or get pictures of other apps you think you look good
  • Note things that you notice in your home that could be improved etc.
  • Research existing solutions

Requirements Specification

  • Purpose
  • Scope
  • Aims
  • Objectives
  • Functional & Non-functional requirements
  • UML :angry:

8th October Meeting

All members should attend. The meeting will be take place at GRGMRG.6 from 15:00 till 16:00.


  • Can a member of the group please bring an HDMI cable


  • Discuss solutions
  • Discuss roles on requirement specification writing
  • Arrange meeting with Manager
  • Discuss App naming and other naming issues

Meeting | 15:00

Existing Solutions | 00:00

  • Future Home
  • Your Smart Home
  • Cedia
  • Bosch Smart Home

Assigning Tasks | 08:00

  1. Requirements Specification
    • Humaid
  2. Risk Analysis
    • Amaan
    • Ruaridh
  3. Project Decisions & Plan
    • Alakbar
  4. Project Costing
    • Mark
    • Numan
  5. Usability Evaluation of Mock-ups

To-Do | 39:12

  • Familiarise yourself with the section in the Stage 1 report that has been assinged to you

11th October Meeting

Meeting 1:30pm @ GRID

  • In this meeting we hope to discuss the current stage 1 roles further
  • We will allocate more specific deadlines and start dates for each section
  • Understanding Gantt Chart

Gantt Chart Pdf

The Gantt Chart below is not final and will V2 will be created after this meeting


@RuaridhMollica explained the Gantt chart, demonstrating a couple of features of TeamGantt.

@humaid discussed the tooling set we are going to use for Go development, and how to make the most of the tools available, and integrating it with Continuous Integration. He also briefly discussed about GoDoc generation and Git Merging.

We also discussed about buying a domain and how to setup and deploy websites. @humaid proposed:

  • For buying domains NameCheap is a good seller.
  • For hosting dynamic web apps Heroku is a good free host.
  • For static site hosting, Netlify is a good choice.

16th October Meeting

This meeting will take place at 1:30pm.


  • Discuss what we will use for our website (Wordpress?)
  • Discuss how we should keep the project at the end. So we have consensus on releasing the project open-source, and keeping the domain alive after the year (so we can link it on our portfolios/CV).
  • Explain the structure of Go project.

Meeting | 13:30

Website for Stage 2

Undecided for now. Deal with later. However try to minimise code use to save time


Look at Gantt chart for your task to complete by next meeting.

Head to Accounts for login details.

22nd October Meeting

This meeting will take place at 1:00pm at Library - Floor 2, Digital Study Studio 2 (10) - Edinburgh.


  • Sprint


Each present member gave a brief summary of the work that they have completed and what they are planning to work on.

It seems as though some members have exhausted their task list and it has been recommended that those who have nothing to do can take the initiative and fill tasks that have not been completed or listed.

5th November Meeting

This meeting will take place at 1:00pm.


  • Check progress on stage 1
  • Discuss usability test

Meeting | 1pm

Alakbar did not record the audio nor transcript for this meeting. The following notes are from memory only. Everyone was asked how they are getting on. No issues so far.

Usability Testing | Time

We are unsure as to how exactly the usability testing will be conducted, however we know that the spec requires at least 6 people. We are planning on getting a small group of poeple to test a few designs of our app once we have the mockups


  • If you find an uncompleted/unassigned section in the stage 1 reports, consider assigning yourself to it
  • A basic mockup of the PWA must be created by next week or the week after

15th January Meeting

This meeting will take place at 14:30am at GRID Meeting Room 7 - Edinburgh.

Meeting | 14:30

Looking Over Feedback | 15:00

Went over feedback of the stage 1 report as a group.

Localhost | 15:30

Humaid went over the structure of the webserver and how to set it up on ones own machine.

CSS framework | 16:00

Numan informed the team about MDB (Material-Design Bootstrap), the team as a colective agreed to use this techonlogy moving forward. Humaid downloaded and setup the framework and is now ready for use.
We plan on starting front end development on 17/01/2020

ER Diagram and DB Implementation | 17:00

Worked on a basic form of the ER diagram, trying to figure out what we might need to include in the database. After a rough outline was drawn on a whiteboard we bagan implementing the schema allocating a table for each group member to complete, all files created have been pushed successfully.

Nacldow have officially started the implementation phase.

17th February Meeting

This meeting will take place at 14:30 at Library Group Study Room 2

Meeting | 14:30

To-Do Stuff

Adding Features to iglu

  • Humidity simluation and display
  • Gamification
    • Badges
    • Friends/social media
    • Compare to houses in your area
    • Statistics (doors/windows/water usage)
  • Schedules
  • Modes (holiday mode/going out)
  • Contextual tips/actions (hey its hot outside, maybe open the windows)
  • User profiles/privileges (Landlord privileges)
  • Statistics page
  • Room breakdown (how much power is it using)
  • Piggy bank for saving
  • Internet IoT for devices like door sensors

Revisions and Updoots

  • Think about rethinking the login process. Single login, multiple accounts (e.g. Netflix)

13th February Meeting

This meeting will take place at 14:30am at GRID.

Meeting | 14:30

Absolutely Critical | 14:45

  • Hoody/T-shirt
  • Nacdlow stickers MERCH

Necessary Stuff

  • Plugins
  • Toggles
  • Accessibility modes
  • Accounts/permissions
  • Dashboard (graphs)
  • Rooms page cards with master switches
  • Sliders not working


  • Moving devices from room to room
  • Floor plan
  • Inviting guests
  • Alerts/notifications
  • PWA (service workers)
  • Dynamic tips


  • Raspberry Pi


  • Lightning talk vs demonstration
  • Did you like our vid :)

17th February Meeting

This meeting will take place at 11:00 at the GRID

Meeting | 11:45

Things to Redesign

  • Add "Cancel" button when editing device/room names
  • Make "Save Changes" button smaller
  • Try to fix edit box cursor position (add padding?)
  • Fix h1, h2, h3, etc. allocations to certain elements (especially on desktop)
  • Cards on dashboard for favourites INTENSE redesign
  • Font on device status card (specific rooms page)
  • Add "back to iglu" button on Marketplace
  • Toggle button on device not changing after another user toggles it
  • Change off colours to grey as opposed to red
  • Grey out toggles or sliders when device is off
  • Back button on accounts page takes you to the confirm delete modal if you were on that page previously
  • Change "Switch Accounts" to "Switch Users"
  • Make/source 3 icons for the user to set as their logo

Things We Want Working By The Expo

  • Netflix Login System
  • Move devices to other rooms
  • Overview page with floorplan (at least visually)
  • Flesh out account permissions (restricted)
  • Have a table of permissions for every role in app, if possible
  • Add option to restrict a room to only admins when logged in as an admin (whilst creating the room and also an option in the drop down)
  • T-Shirt (BLACK)
  • Button Redesign

Members ideas section.

Alakbar's Ideas

  • Hygrometer (per room?)
  • Smart meter replacement (all in one solution)
  • Battery life of house to encourage using less power
  • Gamification ("you used your shower for 20mins more than last week") [be careful]

Amaan's Ideas

  • SmartThings by Samsung
    • User-programmable automation
    • Easy Navigation
    • Room Specific controll
    • Simple Device Registration
    • "Modular"

  • Server Ideas
    • A small modern-looking box similar to WiFi routers
    • Easy to set up "plug and play"
    • No need for professional installation
    • Include LCD screen to display helpful information
    • Maybe incude same interface as mobile version of application

Humaid's Ideas

  • Security ideas

    • Two factor authentication
    • Ability to list/audit sessions of users
    • Log actions, with timestamps, etc
  • Record the following stats

    • How many times the house entrance door is opened
    • How many times the fridge/freezer is opened
    • How long the shower is used for
    • Which windows are open, and for how long
    • Which appliances, devices, and accessories are running in the house. This includes lights, TVs, and chargers.
  • Module Marketplace

    • This market place allows users to install modules/plugins to their system, just like browser extensions, but for the home.
    • Maybe an open-source API, so people can hack it to make it their own.
    • They can install "premium" modules, which they can install by contacting a contractor. For example they might want additional lighting, or a smart crock pot/rice cooker which works with the system.
    • We can use Go's plugins package.

Numan's Ideas

General Ideas for the Application -


  • Set target limits for energy consumption. Contextual tips and suggestions for achieving the set target.
  • Gain points or an energy rating based on how low energy consumption has been. Achievements/badges can be unlocked.
  • Compare your points/rating with friends (via social media etc) or energy consumption with neighbourhood (through national grid).
  • Possible money incentive - energy bill savings in vouchers.

User Experience:

  • Select a home type, small home (apartments, flats, 1/2 bedroom etc), regular home (3/4 bed) and large (5+ bed). Can help to make the app better tailored to the user. Maybe even new or old home, limiting certain functions of the app.
  • Different modes e.g. holiday mode. App puts lights on at night and turns of all other automations storing as much energy as possible.
  • Home managers can set permissions for other user groups e.g. guest group for... guests.

UI & Naming

  • Home screen with latest energy stats and suggested controls based on time, temp, past behaviour.
  • Live smart - possible app name.
  • Samsung's Smartthings app has clean a UI.
  • Smart meter inspired graphs -

image image

Ruaridh's Ideas

In this part of the wiki i will include any ideas that come to mind. This is merely a place to put things, no idea here is guaranteed to make it to the final implementation.

Ideas for Features:

  • In sunny weather the application can ask the user if they wish to enter "Sun Mode": a mode that turns off all lights and opens blinds in order to save energy and maximise solar panels
  • Identifies where in the home heat and power is being lost to things such as: draughts from doors and windows, appliences using more power than needed, lights being left on etc..
  • A priority mode where the user can select what devices to send the most power to. e.g. in eco mode perhaps the user may not want to waste power on speakers and focus it on heating etc..
  • A share feature that allows the user to send milestones about energy saving/consumtption to friends: free advertising :stuck_out_tongue_winking_eye:
  • Room specific power usage values with the option to go into more detail of each room e.g. specific device power usage
  • As you become more prevelent in energy saving your bills will decrease. Hence, money saved on bills over time can get accummulated into a "pot" that saves/ keeps track of how much money has been saved. include graphs etc..

Ideas for Functionality:

Ideas will go here

Ideas for UI and Design:

Colour study:

  • I looked at colours that would pehaps emphasise things that the company and app represent e.g. enegry, eco, tech, future.. Colour_Study

Research and Analysis section.

Research into existing solutions

Great Document Detailing a Human First Ideology in a Future Home:

Putting the Human First in the Future Home

  • Highlights pros and cons
  • Integration into society
  • Provides some solid statistics

SmartThings by Samsung

SmartThings Features:

  • Good example of a modern clean and elegant solution while still being powerful.

Bosch Smart Controller

Bosch SmartHome Controller Features:

  • Heating control
  • Radio and Music Control
  • Lighting
  • Windows
  • Alarm System
  • Presence Simulation
  • Motion Detectio
  • "Future Proof"(Auto Updates)


YourSmartHome Features:

  • Great app based implementation on phone, tablet and smart watch
  • Lighting Levels can be set to dim and brighten with the rise and set of the sun
  • Emphasises that the automation of things can be manually overridden(full control)
  • Has solar and wind power integration

Futurehome - Smart Home

Futurehome Features:

  • Product style can be picked e.g. cool, jazzy or glamour look
  • Simplistic and clean design with nice elegant cartoons demonstrating features
  • Emphasises safety and that a smart home is "just your home only smarter"
  • Mode settings and shortcuts
  • Alarms
  • Power and usage statistics
  • Multiple users
  • Event triggers
  • Timelines
  • Auto-Update Limitations:
  • Does not support 3rd party devices : expensive :moneybag:

E.ON Home

E.ON Home Energy Management Features: Most features are similar to that of the prior solutions with addition of:

  • Controlling energy generation and consumption
  • Highly flexible with full support for 3rd party applications and devices
  • Makes great use of weather to maximise energy
  • Provides full energy plans along with the future home if that is desired

What unit of energy should we use?

To measure "energy generated" from the solar panels we should use kW, this unit will change dependent on how much sunshine comes into contact with the solar panels.

To measure "energy stored" we should use kWh, this unit will change dependent on how much energy is generated and also how many/what devices are being used.

source1 source2

How much electricity does lights in a living room use?

Assuming we are only using LED bulbs we will use 10 watts as a standard power rating of each bulb for the calculations. this means for every hour a bulb is on it will consume 0.01 kWH of energy stored from the solor panels.

With the above statement and assuming a living room has 4 lights and are on for 8 hours on a typical day we can do the following calculation:

=> 4 lights * 8 hours * 10w = 320Wh per day => 320 Wh / 1000 = 0.32kWh per day.

How much electricity does heating and cooling use?

A central air conditioner/heat pump on avarage uses 15,000W per hour or 15kW per hour.

How much electricity does an energy efficent house use?

An avarage home in the UK uses between 2700kWh - 4200kWh per year dependent on the size of the house. We will assume our home on avarage will consume 3000kWh per year.

How much electricity does an energy efficent house use when all lights and heating/cooling off?

Manager's section.

Manager Emails

All communications with the manager via email should be included in this page.

This section has been redacted to protect the privacy of the individuals involved.

Manager Meetings

All communications with professors and manager should be included in this page.

Manager meetings will be held every 2 weeks.

Meeting With Manager | 13:00 - 08/10/19=

[Link redacted]

  • Natural Language Processing is the managers field.
  • Encouraging using actual hardware (Raspberry Pi).
  • Think about retrofitting older homes.
  • Others in the group may not know about some technologies, so keep in mind about not creating too many things to learn.
  • Don't wait till semester 2 to start writing code.
  • Do not underestimate the backend.
  • Biggest issue with Amazon Alexa is human error ("switch off the light... no the other one"). Recommend to leave as a want to have.
  • Market research is important, even though it is down the line. Focus groups, surveys, etc.
  • Think about data. It is very important.

Monday/Wednesday/Thursday are his free days.

Meeting With Manager | 13:15 - 15/11/19

[Link redacted]


  • Give people task and ask them how they would approach it in the group
  • Different age range
  • Each member of the group finds at least 1 person to run the test with, preferably 2


  • Send it to our manager at least 1 week before the deadline so he has time to check it thoroughly