Jeandre Viljoen
210143896
Report Document for University of London BSc Computer Science:
Web Development
(April
2021)
Introduction:
Mutable: music and news is a fictitious news article website/platform that covers and promotes
music
related content from South Africa’s local music scene/industry.
Mostly focused on alternative and heavier music genres. They cover a whole range of
music genres.
The website boasts various types of news. Starting at surface level, standard music news
updates.
The
website also provides single, album or video releases by artists. Events that are happening
around
South Africa and a small percentage of general/international news.
The platform allows for users to submit music or events that hey wish to be covered by the
platform.
Due to modern day content consumption, the need for mobile apps are more and more essential to
engage a large audience. With this in mind; The website design focus was based around mobile
consumption: e.g. Easy and fast access to all content, with extremely simple layouts,
verticality
and low amount of clutter.
The website is supposed to represent a phone ‘application’ rather than a traditional full-scale
website.
Due to the main content of the website being alternative music. The theming is mainly dark,
aesthetically grungy and as simple / modern as possible.
Inspiration
• Other local (and styled) music news websites.
• The fictitious name brand "Mutable" is based around a personally owned and real world brand. I was deeply inspired by the existing brand’s core values and aesthetics and strived to represent a similar level of quality that the real brand adheres to.
• Being a Musician and 'content-creator' myself. A big challenge is always to get the name out there. Naturally I gravitated to a music / news website that could help the limited local industry progress forward.
Accessability
• Meta tags are thoroughly implemented. Including image 'alt' attributes to allow for screen readers to be of assistance.
• With the focus on mobile (and smaller screens), images and text is very simply laid out.
Large scaling of objects/text make it easier for people with visual
impairments or small screens to read and consume content.
This, in tandem with a high
contrast, easy-on-the-eyes ‘dark-mode’ color
scheme, and limited use of colors, make for a bright, thematic user-experience and eliminates
unnecessary distractions with over the top details or colors.
• Entire page is tabbable for users not using standard mouse and keyboard, as well as phone touch
screens
(which limits input resolution due to big finger print surface area.)
Combined with a
sticky
navigation bar; all pages are easily accessible at all times from anywhere on the site.
Usability
• Simple layout and modern design. Limited colors to remove unnecessary distraction and easily keep focus on important content. Focused on mobile, the app is very portable and simple to use. Animated buttons and sections feel sleek, satisfying and responsive to use.
• Website content gets generated from a database and is not hard-coded. Adding articles and
events is as simple as filling in the information in the database and after saving, the website
will automatically update all the sections and latest news containers with the latest articles.
Thus making it simple and fast to update the site.
This can further be extended by allowing
users to fill in submission forms and having the page directly update the information without
the need of an administrator to do the ‘paperwork’.
Forms to submit content is data validated
to
a degree. Meaning the site will not accept normal text when it expects hyperlinks or even
numbers when it expects dates values.
• All content is linked and visible from the main index page through multiple avenues/links. This ensures that first-time visitors do not get overwhelmed by information or complex navigation. And helps returning visitors navigate the page extremely fast. Always 1-2 clicks away from anything on the site.
Learning
• How to import data files and convert them to class data structures in order to work with them. (This took days and several grey hairs to get right). This was essential to have the page generate its content via templates on demand. I opted for the JSON filetype which integrates easily with javascript and is easy to update information when necessary
• How to keep data persistent between different HTML pages. Scripts would lose scope when the users navigated away. This required a way to transfer article or event indexes so that the article or event page could display the correct item based on the index of the article stored within an array. Although not ideal, with the limited functions of vanilla JS, CSS and HTML, as well as not using a modernized SPA format. I ended up using the local session storage to transfer essential data between HTML pages.
• A magnitude of JS, HTML and CSS things. Whenever I would run in to a problem, I’d scour the
internet for a solution. This took hours of tutorials and stack-overflow forums.
Some of
which includes:
- 3rd party library for the image carousel,
- Working with fancier
animations,
- Using
quality of life tools like SASS to improve efficiency and categorization of styling
code,
- Using
a library to easily include icons,
- Templating using Handlebars.
- And much more.
Evaluation I
I am very proud of the aesthetics and modern, responsive look / feel for a page completely coded
in vanilla JS, CSS and HTML.
The best (and most complex) feature about the website is that its generating content from a JSON
database and creating full pages from templates and Javascript code.
My custom designs look professional and sleek and my choice for visual aesthetics to represent
an alternative music brand website feel accurate and fitting.
Evaluation II
The biggest downfall of my website would be the slow loading time and unoptomized images etc. A
great example is getting the background to loop seamlessly as the users scrolls down. An easy
way to do this is tile the background image and flip/mirror every second tile. However after
some research, this is almost impossible with vanilla code. Instead I baked the mirrored
background in to the image file. But this doubled an already large file size. Not to mention,
because the site is not an SPA, every time a new page gets loaded, it has to load up the
background image again. And this can make for a jarring navigation / user experience.
Forms can be implemented better, storing and processing submitted user data, however for this
project I kept it simple for the sake of time management.
Some more categorization could be added for site content e.g. upcoming and past events.
Vanilla coding is slow and tedious and would’ve liked to learn a framework such as React.
Next time I will definitely learn how to make a modern SPA via a framework to teach myself more
about how the industry really works with websites.
Resources
Image Carousel Code
Blueimp, 'Gallery 3.3.0', 2021
blueimp.Gallery(document.getElementById('links').getElementsByTagName('a'), {
container: '#blueimp-gallery-carousel',
carousel: true
})
document.getElementById('links').onclick = function (event)
{
event = event || window.event
var target = event.target || event.srcElement
var link = target.src ? target.parentNode : target
var options = { index: link, event: event }
var links = this.getElementsByTagName('a')
blueimp.Gallery(links, options)
}
https://github.com/blueimp/Gallery
Bootstrap
(Did not intentionally use it but when I cleaned up the code my website broke, so I left it in)
link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"
integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous"
Font Awesome - icons
link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.0/css/all.css"
integrity="sha384-lZN37f5QGtY3VHgisS14W3ExzMWZxybE1SJSEsQp9S+oqd12jhcu+A56Ebc1zFSJ" crossorigin="anonymous"
Handlebars - templates
script src="https://cdn.jsdelivr.net/npm/handlebars@latest/dist/handlebars.js">
Hover icon code for social media links
Easy WebCode, 'Social Media Button Hover Effect', 2021
.social-menu ul {
padding-left: 100px;
padding-right: 100px;
margin: 0;
display: flex;
}
.social-menu ul li {
list-style: none;
margin: 0 10px;
}
.social-menu ul li .fab {
color: #000000;
font-size: 35px;
line-height: 50px;
transition: .3s;
}
.social-menu ul li .fab:hover {
color: #ffffff;
}
.social-menu ul li .far {
color: #000000;
font-size: 35px;
line-height: 50px;
transition: .3s;
}
.social-menu ul li .far:hover {
color: #ffffff;
}
.social-menu ul li a {
position: relative;
display: block;
width: 50px;
height: 50px;
border-radius: 10px;
background-color: rgb(117, 117, 117);
text-align: center;
transition: 0.3s;
transform: translate(0,0px);
box-shadow: 0px 7px 5px rgba(0, 0, 0, 0.5);
}
.social-menu ul li a:hover {
transform: rotate(0deg) skew(0deg) translate(0, -10px);
}
.social-menu ul li a:active {
transform: scale(1.15);
transition: 0.1s;
}
.social-menu ul li:nth-child(1) a:hover {
background-color: #3b5999;
}
.social-menu ul li:nth-child(2) a:hover {
background-color: #55acee;
}
.social-menu ul li:nth-child(3) a:hover {
background-color: #e4405f;
}
.social-menu ul li:nth-child(4) a:hover {
background-color: #cd201f;
}
.social-menu ul li:nth-child(5) a:hover {
background-color: #e94a0b;
}
https://codepen.io/easywebcode/pen/qBBvNEO
SASS to improve CSS workflow
https://sass-lang.com/
Various YouTube tutorials as well as stack-overflow troubleshoting.
Adobe Illustrator for wireframe, mockups and content design.
Images / Content
All images and content such as text used are all under my own ownership/rights or
I have consent from rights owners.
Branding designs and all write-ups with the exception of some description sections under the
'events' page is all designed and written by myself.
Appendices
• Wireframes and Site-map• Planning, Mockups and Design