Do Website Builders Allow You to Create a Unique Design?

Original Source: http://feedproxy.google.com/~r/Designrfix/~3/joxP7Hu7fFo/website-builders-create-unique-design

Creating and launching your own website no longer requires the ability to program and code using languages such as HTML, CSS, and JavaScript. With the advent of website builders and monthly services available, anyone is now capable of building a website in no time regardless of its purpose. If you are interested in having your […]

The post Do Website Builders Allow You to Create a Unique Design? appeared first on designrfix.com.

Examples of Unorthodox Mobile App Designs

Original Source: http://feedproxy.google.com/~r/1stwebdesigner/~3/moKaz85vJmc/

Mobile apps should generally follow the same format and guidelines. Whether it’s Material Design or iOS Human Interface Guidelines, pushing designers to follow a design system ensures consistency across an entire operating system. This makes it easier for the end user to switch between apps with familiarity and ease. However, some mobile app designs break free of these constraints for the sake of experimenting with new styles and layouts. It enables us to envision new solutions to issues like navigation structures and work on general user experience design improvements.

In this article we are going to look at a selection of the most interesting and unorthodox mobile app designs. They each reconsider almost every aspect of a typical design.

Messages

Messages

This messaging app moves away from the traditional header and tab bar associated with iOS. Instead it focuses on using simple navigation items, in-line tabs and depth to provide visual separation of elements.

iOS 11 Activity App

iOS 11 Activity App

This activity app for iOS 11 goes against Apple’s advice to embrace the iPhone X notch. However, the result of using a black background is both visually impressive and less harsh on battery life. The bright green iconography contrasts beautifully against this background.

Pay App

Pay App

This Android app design offers a new take on primary action buttons, positioning the ‘Receive Money’ button on the top right. The tab bar has also been tweaked and the overall design looks cohesive with its singular background color.

Crypto Trading

Crypto Trading

Using an abundance of depth, this iOS design takes visual cues from Material Design and implements them for iPhone. The design language is not associated with iOS styles but is wonderfully simple and offers a rethink of how added contrast and separation can enhance a design.

Events App

Events App

This events app is unique in the way it uses a colorful title bar background. It brings the edge-to-edge display to life and adds a great deal of design merit and feeling to the product.

Urban Timetable

Urban Timetable

Using bright purples and blues, this timetable app moves away from the minimalist white that has become so popular across iOS. The result is visually stunning and ties into the brand perfectly.

Settings Interface

Settings Interface

This settings interface takes on a more radical rethink of how a mobile app could look. From the colorful, graphic-intensive title bar, to the minimal switches, it’s a visually impressive design which looks easy to use and understand.

Kilpi Interactive

Kilpi Interactive

Not only does Kilpi use a completely redesigned title bar and header section, it also introduces an entirely new type of navigation system. It relies on rotating a wheel as opposed to using dropdowns, tabs and other traditional components. It looks visually impressive and easy to use with one hand.


The Wix Code Database and Data Modeling

Original Source: https://www.sitepoint.com/the-wix-code-database-and-data-modeling/

This article was created in partnership with Wix. Thank you for supporting the partners who make SitePoint possible.

One of the cool features of Wix Code is the ability to separate your site’s design and layout from its content. This means you can create and maintain your information in a database and then have your pages dynamically retrieve and display this information in whatever way you like.

Let’s take an in-depth look at what you can do with the Wix Code database, including the types of information you can store, ways you can manipulate data with code, and how you can dynamically display the information on your site.

Throughout this article, we’ll use a simplified example of an art school that stores and displays information about its courses and teachers.

The Wix Code Database

Like all databases, the Wix Code database is made up of individual tables, which we call collections. In our example of the art school (see image below), we have two collections, one each for the courses and teachers.

art school

You can create as many collections as you need and populate them with a near unending amount of data. A robust permissions model means you have complete control over who can access your information and what they can do with it.

You can work directly in your Live data, which is the information your visitors see when they view your pages. You can also work with Sandbox data, so you can try stuff out without affecting your live site. You can sync between them at any time.

Populating Collections

You have several options for populating your collections. You can manually enter data directly in the Wix Content Manager, either to your Live data or your Sandbox data.

If you’re an Excel ace, you can do all the work in Excel (or whatever spreadsheet program you prefer), save your sheet as a CSV file, and then import it into the Wix Code database. In fact, you can create your entire collection this way, schema and all. You can import to your Live data or your Sandbox data.

You can also export your Wix data to CSV files. If you make sure to include the built-in ID system field, you will be able to modify your content in your spreadsheet and then re-import it into your Wix Code database so that each record, or what we call item, is updated.

A third option is to build a form to capture user input and store it in your database.

Using External Databases

If you already have a database somewhere, you might be thinking that you don’t want to recreate it in Wix. The good news is that you don’t have to. As long as your database exposes an API, you can access it from your Wix site.

For simple applications, you can use the wix-fetch module—an implementation of the standard JavaScript Fetch API—to access your external database with an HTTP request and use that data in your Wix site’s pages.

You can also pair the wix-fetch module with another Wix module, wix-router, that lets you control the routing of incoming requests. Using the functionality provided by both of these modules, you can create SEO-friendly dynamic pages that show different data depending on the URLs used to reach them.

For example, you can design a single member profile page that can be used by all of your site’s members.

Using wix-router and wix-fetch you can write code that pulls information from incoming requests for the profile page, queries an external database to retrieve the information for the page, and then injects that data into the profile page. You can even add security to your page by using the wix-users module.

So if you create another page for users to update their profile pages, you can check who is trying to access it and only allow users to update their own profiles.

Data Hooks

You can add hooks to actions on your collections using the wix-data API.

For example, in our Teachers collection, we have two separate fields: First name and Last name. To make displaying names on our pages easier, we also want to have one field that has both names together. To do this, we can add a beforeInsert hook to our Teachers collection that hooks into the insert action, reads the contents of the First name and Last name fields, and then concatenates them and populates the Full name field.

Modeling Your Data

Now that we’ve covered the database itself, let’s talk about modeling your data in the Wix Code database.

Collection Schemas

Like all databases, each collection has a schema to define its fields. All standard field types are supported, including text, image, boolean, number, date and time, and rich text.

There is also a field type specifically designed for URLs. It automatically formats the URL into clickable links that you can add to your pages. For example, teachers in your school could supply the URL of their portfolio website, and you could include that link on their dynamic page.

You can also use the document field type to store a wide range of file types. You can allow your users to download files stored in your collections (such as reading lists for each course) or to upload their own files.

ID Fields and Primary Fields

Each collection has an _ID field, which is the primary key for that table. Collections also have a primary field (indicated by a lock icon), which is the display key for each item.

When you create joins using reference fields (see the next section), the values come from the primary field. The reference itself uses the _ID field, of course. If you plan on using reference fields, it’s a good idea to make sure the data you store in the primary field is unique.

ID field

Reference Fields

Reference fields create a connection between collections that is defined in the collection schema itself. This is similar to foreign keys in relational databases.

Each reference field points to a specific collection. The value that is displayed in the reference field in each item in the collection is taken from the value of the primary field of the referenced collection.

Reference fields

In our example, we created a reference field in our Courses collection that points to our Teachers collection so that we can indicate who teaches each class.

The advantage of reference fields is three-fold. First, they help maintain data integrity because their value is taken directly from the referenced collection. Second, they help eliminate data duplication, which we all know is the enemy of good database design. And third, when we create our page layouts, reference fields let us access information in the referenced collection as well as in the main collection we are using. This allows us to create master-detail pages, such as a list of all the courses taught by each teacher.

Creating Pages from Your Content

Of course, storing and maintaining data is nice, but the real point of having a website is displaying content to visitors. So let’s talk about how that works with Wix Code.

Back to our art school example. We have two different types of information: courses and teachers. So you could start by designing a page layout to display all the information about each of the courses. Then you might want to create a master-detail page that lists all of your teachers and the courses they teach.

Continue reading %The Wix Code Database and Data Modeling%

Collective #387

Original Source: http://feedproxy.google.com/~r/tympanus/~3/HBHTyNMqrDs/

C387_wotw

Inspirational Website of the Week: Antoni

Super smooth transitions and a great design. Our pick this week.

Get inspired

C387_treehouse

Our Sponsor
Gain new skills to boost your career – Learn CSS with Treehouse

Add to your creative tool box. You can push pixels, but can you build a responsive web design? Start your path to becoming a front-end web developer, or brush up on your skills with our CSS course. We’ll walk through everything you need to know to build web pages.

Claim your free trial

C387_pigment

Pigment

One of the fantastic design tools made by ShapeFactory.

Check it out

C387_emeyer

CSS: The Definitive Guide, 4th Edition

An excerpt from Chapter 19, “Filters, Blending, Clipping, and Masking”, of “CSS: The Definitive Guide” by Eric Meyer and Estelle Weyl.

Read it

C387_icons

Let’s make multi-colored icons with SVG symbols and CSS variables

A great technique by Sarah Dayan for multi-colored SVG icon symbols.

Read it

C387_BEM

Grandchild elements in BEM

Luke Whitehouse writes about the unpleasant issue of grandchild elements in BEM and some options for dealing with it.

Read it

C387_cssgrid

Grid Examples

A place to get inspiration for CSS Grid layout examples in the wild.

Check it out

C387_browsercomp

mdn-browser-compat-data

A repository that contains browser compatibility data that describes which platforms support particular Web APIs. Read more about it in this article.

Check it out

C387_Caire

Caire

Caire is a content aware image resize library that leaves the most important part of the image.

Check it out

C387_stimulus

Stimulus 1.0: A modest JavaScript framework for the HTML you already have

Read about the Stimulus JavaScript framework in this article by David Hansson.

Read it

C387_browsersketching

Sketching in the Browser

Mark Dalgleish shares the great journey of the work that aims to bridge web design and development.

Read it

C387_serverless

The Power of Serverless for Front-End Developers

Useful info and resources on serverless for web developers.

Check it out

C387_Snakes

I shall resist

A beautiful demo for snake lovers by Gerard Ferrandez.

Check it out

C387_shittiest

Shittiest Project Ever

Smile Studio presents the shittiest project ever to waste your time 😉

Check it out

C387_4billion

Digital in 2018: World’s internet users pass the 4 billion mark

Some very interesting report insights from We Are Social and Hootsuite.

Read it

C387_palette

Dribbble Color Palette Generator

Generate a .sketchpalette file from any Dribbble shot’s color palette to be loaded in the Sketch-Palette plugin. By Amie Chen.

Check it out

C387_varfonts

One File, Many Options: Using Variable Fonts on the Web

Ollie Williams shows how to use variable fonts in your web projects.

Read it

C387_easytimer

EasyTimer.js

An easy-to-use timer library compatible with AMD and NodeJS.

Check it out

C387_pwa

An introduction to Progressive Web Apps

A great guide to Progressive Web Apps (PWA) by Flavio Copes.

Read it

C387_vr

Web AR with smart plugs using A-frame

First part of an article series about using Web AR using A-Frame to visualize energy consumption using Wemo smart plugs connected to home appliances. By Gemma Vincent.

Read it

C387_jscopy

Deep-copying in JavaScript

An interesting guide for copying an object in JavaScript.

Check it out

C387_varfontsuse

How to use variable fonts in the real world

An interesting article by Richard Rutter on the challenges of using variable fonts.

Read it

C387_sun

GLSL: Underwater Sun

A great GLSL demo by Liam Egan.

Check it out

Collective #387 was written by Pedro Botelho and published on Codrops.

User Authentication with the MEAN Stack

Original Source: https://www.sitepoint.com/user-authentication-mean-stack/

In this article, we’re going to look at managing user authentication in the MEAN stack. We’ll use the most common MEAN architecture of having an Angular single-page app using a REST API built with Node, Express and MongoDB.

When thinking about user authentication, we need to tackle the following things:

let a user register
save their data, but never directly store their password
let a returning user log in
keep a logged in user’s session alive between page visits
have some pages that can only been seen by logged in users
change output to the screen depending on logged in status (e.g. a “login” button or a “my profile” button).

Before we dive into the code, let’s take a few minutes for a high-level look at how authentication is going to work in the MEAN stack.

The MEAN Stack Authentication Flow

So what does authentication look like in the MEAN stack?

Still keeping this at a high level, these are the components of the flow:

user data is stored in MongoDB, with the passwords hashed
CRUD functions are built in an Express API — Create (register), Read (login, get profile), Update, Delete
an Angular application calls the API and deals with the responses
the Express API generates a JSON Web Token (JWT, pronounced “Jot”) upon registration or login, and passes this to the Angular application
the Angular application stores the JWT in order to maintain the user’s session
the Angular application checks the validity of the JWT when displaying protected views
the Angular application passes the JWT back to Express when calling protected API routes.

JWTs are preferred over cookies for maintaining the session state in the browser. Cookies are better for maintaining state when using a server-side application.

The Example Application

The code for this article is available on GitHub. To run the application, you’ll need to have Node.js installed, along with MongoDB. (For instructions on how to install, please refer to Mongo’s official documentation — Windows, Linux, macOS).

The Angular App

To keep the example in this article simple, we’ll start with an Angular app with four pages:

home page
register page
login page
profile page

The pages are pretty basic and look like this to start with:

Screenshots of the app

The profile page will only be accessible to authenticated users. All the files for the Angular app are in a folder inside the Angular CLI app called /client.

We’ll use the Angular CLI for building and running the local server. If you’re unfamiliar with the Angular CLI, refer to the Angular 2 Tutorial: Create a CRUD App with Angular CLI to get started.

The REST API

We’ll also start off with the skeleton of a REST API built with Node, Express and MongoDB, using Mongoose to manage the schemas. This API has three routes:

/api/register (POST) — to handle new users registering
/api/login (POST) — to handle returning users logging in
/api/profile/USERID (GET) — to return profile details when given a USERID.

The code for the API is all held in another folder inside the Express app, called api. This holds the routes, controllers and model, and is organized like this:

Screenshot of api folder structure

At this starting point, each of the controllers simply responds with a confirmation, like this:

module.exports.register = function(req, res) {
console.log(“Registering user: ” + req.body.email);
res.status(200);
res.json({
“message” : “User registered: ” + req.body.email
});
};

Okay, let’s get on with the code, starting with the database.

Creating the MongoDB Data Schema with Mongoose

There’s a simple user schema defined in /api/models/users.js. It defines the need for an email address, a name, a hash and a salt. The hash and salt will be used instead of saving a password. The email is set to unique as we’ll use it for the login credentials. Here’s the schema:

var userSchema = new mongoose.Schema({
email: {
type: String,
unique: true,
required: true
},
name: {
type: String,
required: true
},
hash: String,
salt: String
});

Managing the Password without Saving It

Saving user passwords is a big no-no. Should a hacker get a copy of your database, you want to make sure they can’t use it to log in to accounts. This is where the hash and salt come in.

The salt is a string of characters unique to each user. The hash is created by combining the password provided by the user and the salt, and then applying one-way encryption. As the hash can’t be decrypted, the only way to authenticate a user is to take the password, combine it with the salt and encrypt it again. If the output of this matches the hash, the password must have been correct.

To do the setting and the checking of the password, we can use Mongoose schema methods. These are essentially functions that you add to the schema. They’ll both make use of the Node.js crypto module.

At the top of the users.js model file, require crypto so that we can use it:

var crypto = require(‘crypto’);

Nothing needs installing, as crypto ships as part of Node. Crypto itself has several methods; we’re interested in randomBytes to create the random salt and pbkdf2Sync to create the hash (there’s much more about Crypto in the Node.js API docs).

Setting the Password

To save the reference to the password, we can create a new method called setPassword on the userSchema schema that accepts a password parameter. The method will then use crypto.randomBytes to set the salt, and crypto.pbkdf2Sync to set the hash:

userSchema.methods.setPassword = function(password){
this.salt = crypto.randomBytes(16).toString(‘hex’);
this.hash = crypto.pbkdf2Sync(password, this.salt, 1000, 64, ‘sha512’).toString(‘hex’);
};

We’ll use this method when creating a user. Instead of saving the password to a password path, we’ll be able to pass it to the setPassword function to set the salt and hash paths in the user document.

Checking the Password

Checking the password is a similar process, but we already have the salt from the Mongoose model. This time we just want to encrypt the salt and the password and see if the output matches the stored hash.

Add another new method to the users.js model file, called validPassword:

userSchema.methods.validPassword = function(password) {
var hash = crypto.pbkdf2Sync(password, this.salt, 1000, 64, ‘sha512’).toString(‘hex’);
return this.hash === hash;
};

Generating a JSON Web Token (JWT)

One more thing the Mongoose model needs to be able to do is generate a JWT, so that the API can send it out as a response. A Mongoose method is ideal here too, as it means we can keep the code in one place and call it whenever needed. We’ll need to call it when a user registers and when a user logs in.

To create the JWT, we’ll use a module called jsonwebtoken which needs to be installed in the application, so run this on the command line:

npm install jsonwebtoken –save

Then require this in the users.js model file:

var jwt = require(‘jsonwebtoken’);

This module exposes a sign method that we can use to create a JWT, simply passing it the data we want to include in the token, plus a secret that the hashing algorithm will use. The data should be sent as a JavaScript object, and include an expiry date in an exp property.

Adding a generateJwt method to userSchema in order to return a JWT looks like this:

userSchema.methods.generateJwt = function() {
var expiry = new Date();
expiry.setDate(expiry.getDate() + 7);

return jwt.sign({
_id: this._id,
email: this.email,
name: this.name,
exp: parseInt(expiry.getTime() / 1000),
}, “MY_SECRET”); // DO NOT KEEP YOUR SECRET IN THE CODE!
};

Note: It’s important that your secret is kept safe: only the originating server should know what it is. It’s best practice to set the secret as an environment variable, and not have it in the source code, especially if your code is stored in version control somewhere.

That’s everything we need to do with the database.

Set Up Passport to Handle the Express Authentication

Passport is a Node module that simplifies the process of handling authentication in Express. It provides a common gateway to work with many different authentication “strategies”, such as logging in with Facebook, Twitter or Oauth. The strategy we’ll use is called “local”, as it uses a username and password stored locally.

To use Passport, first install it and the strategy, saving them in package.json:

npm install passport –save
npm install passport-local –save

Configure Passport

Inside the api folder, create a new folder config and create a file in there called passport.js. This is where we define the strategy.

Before defining the strategy, this file needs to require Passport, the strategy, Mongoose and the User model:

var passport = require(‘passport’);
var LocalStrategy = require(‘passport-local’).Strategy;
var mongoose = require(‘mongoose’);
var User = mongoose.model(‘User’);

For a local strategy, we essentially just need to write a Mongoose query on the User model. This query should find a user with the email address specified, and then call the validPassword method to see if the hashes match. Pretty simple.

There’s just one curiosity of Passport to deal with. Internally, the local strategy for Passport expects two pieces of data called username and password. However, we’re using email as our unique identifier, not username. This can be configured in an options object with a usernameField property in the strategy definition. After that, it’s over to the Mongoose query.

So all in, the strategy definition will look like this:

passport.use(new LocalStrategy({
usernameField: ’email’
},
function(username, password, done) {
User.findOne({ email: username }, function (err, user) {
if (err) { return done(err); }
// Return if user not found in database
if (!user) {
return done(null, false, {
message: ‘User not found’
});
}
// Return if password is wrong
if (!user.validPassword(password)) {
return done(null, false, {
message: ‘Password is wrong’
});
}
// If credentials are correct, return the user object
return done(null, user);
});
}
));

Note how the validPassword schema method is called directly on the user instance.

Now Passport just needs to be added to the application. So in app.js we need to require the Passport module, require the Passport config and initialize Passport as middleware. The placement of all of these items inside app.js is quite important, as they need to fit into a certain sequence.

The Passport module should be required at the top of the file with the other general require statements:

var express = require(‘express’);
var path = require(‘path’);
var favicon = require(‘serve-favicon’);
var logger = require(‘morgan’);
var cookieParser = require(‘cookie-parser’);
var bodyParser = require(‘body-parser’);
var passport = require(‘passport’);

The config should be required after the model is required, as the config references the model.

require(‘./api/models/db’);
require(‘./api/config/passport’);

Finally, Passport should be initialized as Express middleware just before the API routes are added, as these routes are the first time that Passport will be used.

app.use(passport.initialize());
app.use(‘/api’, routesApi);

We’ve now got the schema and Passport set up. Next, it’s time to put these to use in the routes and controllers of the API.

Continue reading %User Authentication with the MEAN Stack%

How to Enable AI with Secure Communications

Original Source: https://www.sitepoint.com/ai-the-future-of-apps/

This article was sponsored by BlackBerry. Thank you for supporting the partners who make SitePoint possible.

Imagine a healthcare platform that designs the perfect treatment plan for a patient based on their medical history. Picture a chatbot that automatically generates legal appeals or resolves customer disputes in minutes. Imagine a virtual assistant that knows your habits, likes, and dislikes, and can suggest activities based on this knowledge.

This technology already exists today, and it is just the beginning. Alongside the Enterprise of Things, we are on the verge of a second revolution. Artificial intelligence will change everything, from how we protect ourselves from cyberattacks to how we go about our daily lives.

And much like the Enterprise of Things, businesses that do not start planning for artificial intelligence now will be left behind – according to Tata Consultancy Services, 84% of businesses believe AI will be essential.

Building A Smarter Enterprise – Artificial Intelligence and App Development

Application development will be the foundation of the move towards artificial intelligence. Businesses that integrate AI into their apps will be able to provide new services and a better, more personalized user experience. They will be able to gain deeper insights into how their customers think and act, and open new revenue streams through those insights.

Moreover, artificial intelligence will power new, transformative interactions between people, machines, and the Internet of Things.

Through AI-driven analysis, businesses will gain a deeper understanding of their market and their staff. Automation will allow workers to respond proactively to customer complaints or security incidents, boost productivity, reduce costs, and minimize employee error. And through machine learning, businesses will be able to make better, more informed decisions than ever before.

In time, people will demand such capabilities. Next-generation apps and services will be expected to not only support human-to-human interactions, but also human-to-machine and machine-to-machine interactions. Just as mobile apps are critical to business success today, artificial intelligence will be critical to success very soon.

Getting Past The Roadblocks to Enterprise AI

Though most businesses acknowledge artificial intelligence’s importance, AI remains elusive. The issue is primarily one of complexity and cost. In a 2017 study by Infosys, 72% of IT professionals found time constraints were a roadblock to AI adoption, while 71% referenced financial limitations. Resistance to change and a lack of clarity around AI’s value were also hindrances.

Even for businesses that manage to overcome those challenges, security remains a core issue. AI apps will routinely deal with sensitive data such as customer information, internal messages, login credentials, usage details, and even intellectual property. Left unencrypted, such services could leak that data into the wrong hands.

Communications Platform as a Service (CPaaS) tools are central to overcoming these challenges. By integrating real-time communications into their apps – and tying that functionality to its AI services – developers allow for better, deeper interactions between AI and user. More importantly, with the right CPaaS solution, they ensure those interactions are kept secure, and that the AI does not leak critical data.

How The BBM Enterprise SDK Makes Your Apps Smarter

Here’s where the BBM Enterprise SDK comes in. A secure CPaaS platform built on BlackBerry’s strength in secure mobile messaging, it gives your developers everything they need to incorporate secure, enterprise-grade messaging functionality in their apps. You can use commonly used identity and user management providers to make development even easier.

More importantly, it offers several features that directly empower artificial intelligence:

Embedded voice, video, chat. Enable your users to reach out to anyone around the world and be reached they want, whether for emergency communications, peer-to-peer collaboration, or by receiving personalize support services.
Publish/Subscribe Services. Create channels which broadcast to subscribing users. This keeps them updated on all new activity in a collaboration space, whether by another user or from the machine-readable information your application consumes.
Chatbots and Routing Services. Provide real-time support for your users via a chatbot which can process their data, activity, and messages. This information is then used to route them to the correct contact.
AI-Driven Predictive Analytics. AI algorithms enable behind-the-scenes user empowerment, delivering relevant information to users when they need it. These include location-based alerts or suggested actions based on user behavior.
Secure IoT Data Sharing. Eliminate the worry of cached copies or “fingerprints in the cloud” that could compromise privacy while also supporting real-time data sharing across all endpoints – human and machine.

We suggest that you first download the free SDK and familiarize yourself with the BBM Enterprise SDK with Blackberry’s Getting Started Guide.

Now that you’re ready, let’s dive into some examples that can help you get started with your AI journey…

How to Create Data Streams via Whiteboarding

This example shows how you can send arbitrary data in a BBM Enterprise SDK chat to create a shared whiteboard that allows us to do the following:

Create new whiteboards with one or more users
Share pictures and markup

Continue reading %How to Enable AI with Secure Communications%

Outdoors Template

Original Source: http://feedproxy.google.com/~r/tympanus/~3/Gjco7wLANuM/

Today we’re very excited to share an experimental implementation of one of Gil Huybrecht’s designs with you. Gil creates fantastic signature designs with amazing animations and he kindly permitted us code up one of his works.

outdoors_featured

The design project is called “Outdoors” and it has a very interesting layout with a content/image slideshow and an expanding element. While we tried to implement it as close as possible to the design, we opted to adjust some details. We hope you like the way that it turned out!

If you like Gil’s design, we recommend you checking out his Skillshare class where he teaches about visual hierarchy and spacing.

Note that this implementation is a proof-of-concept that uses modern CSS properties like grid and custom properties. You’ll need to implement proper fallbacks for older browsers.

The layout is powered by layered CSS grids which allow us to use a more semantic HTML structure (see mobile version) without repeating content. We use anime.js for the animations, imagesLoaded for preloading the images and Charming.js for the handling the letter structure of the titles.

Have a look at some screenshots:

outdoors_01

outdoors_02

outdoors_03

We hope you enjoy this layout and find it inspiring!

Thank you, Gil, you rock!

References and Credits

Design by Gil Huybrecht
Images by Unsplash.com
anime.js by Julian Garnier
imagesLoaded by Dave DeSandro
Charming.js by Yuan Qing

Outdoors Template was written by Mary Lou and published on Codrops.

Popular Design News of the Week: January 22, 2018 – January 28, 2018

Original Source: https://www.webdesignerdepot.com/2018/01/popular-design-news-of-the-week-january-22-2018-january-28-2018/

Every week users submit a lot of interesting stuff on our sister site Webdesigner News, highlighting great content from around the web that can be of interest to web designers. 

The best way to keep track of all the great stories and news being posted is simply to check out the Webdesigner News site, however, in case you missed some here’s a quick and useful compilation of the most popular designer news that we curated from the past week.

Note that this is only a very small selection of the links that were posted, so don’t miss out and subscribe to our newsletter and follow the site daily for all the news.

Facebook Just Invented a New Unit of Time

 

UI Design Inspiration – Jan 2018

 

Finding Dead CSS

 

Web Typography Quiz by Better Web Type

 

Gradient Topography Animation

 

35+ Best Free Script Fonts for Designers

 

Instagram’s Latest ‘Feature’ Proves it’s not Listening

 

Year in Pixels

 

Bolt ECommerce

 

Lean UX Principles to Keep your Users Happy

 

Nerv – A Blazing Fast React Alternative

 

Drag and Drop for Design Systems

 

22 Awesome Websites with Stunning Free Stock Images

 

Eight Microinteractions to Help Improve UX

 

How a Single Line of Computer Code Put Thousands of Innocent Turks in Jail

 

Iris – Protect your Eyes from your Computer’s LCD

 

This is the World’s First Graphical AI Interface

 

Stripe: Ending Bitcoin Support

 

10 Best Free Monospaced Fonts for Code Snippets

 

Secret Heroes of UX Design

 

The Art of Storyboarding

 

Build a Better Homepage

 

How I Got Hired by GitHub

 

Stop Asking if Users Want Notifications from your Site

 

The Language of UX

 

Want more? No problem! Keep track of top design news from around the web with Webdesigner News.

All-In-One Resume & CV Builder by MotoCMS – only $24!

Source

p img {display:inline-block; margin-right:10px;}
.alignleft {float:left;}
p.showcase {clear:both;}
body#browserfriendly p, body#podcast p, div#emailbody p{margin:0;}

Frank And Oak's locally Made Wool Suiting Campaign Illustrations

Original Source: http://feedproxy.google.com/~r/abduzeedo/~3/0TUo-4XXNOE/frank-and-oaks-locally-made-wool-suiting-campaign-illustrations

Frank And Oak’s locally Made Wool Suiting Campaign Illustrations

Frank And Oak's locally Made Wool Suiting Campaign Illustrations

AoiroStudio
Jan 30, 2018

Ever since the last feature of Amanda Mocci on ABDZ, she has been crafting her work so beautifully. It can be seen in Fast Company, books and in her personal exploration where I feel she is shining the most. There is so much depth and the contrast is being shown to a whole new level. For the new, Amanda Mocci is an art director and artist based in Montreal, QC. We are sharing a series of illustrations she shared for Frank And Oak, a very popular Men’s Clothing & Women’s Styles. They were promoting their locally Made Wool suits for Men and as you can see. It’s just amazing!

New illustrations created for Frank And Oak’s locally made wool suiting campaign. It was so much fun to work on these! Many thanks to the awesome team at Frank And Oak

More Links
Learn more about Amanda Mocci at amandamocci.com
Follow Amanda on Facebook
Follow Amanda on Instagram
Previous Feature on ABDZ
Illustration
Frank And Oak's locally Made Wool Suiting Campaign IllustrationsFrank And Oak's locally Made Wool Suiting Campaign IllustrationsFrank And Oak's locally Made Wool Suiting Campaign IllustrationsFrank And Oak's locally Made Wool Suiting Campaign IllustrationsFrank And Oak's locally Made Wool Suiting Campaign Illustrations

 

amanda mocci
illustration
frank and oak


Collective #386

Original Source: http://feedproxy.google.com/~r/tympanus/~3/-wg4i-3RBfM/

C386_Freshbooks

Our Sponsor
Invoice Software That Saves You Time

FreshBooks makes small business invoicing and billing so simple, you’ll be amazed at the time you have to focus on doing what you love and how much faster you get paid.

Try It Free

C386_intersectionobs

Now You See Me: How To Defer, Lazy-Load And Act With IntersectionObserver

A great article by Denys Mishunov, where he explains how to work with IntersectionObserver.

Read it

C386_genartwork

Tips to improve your generative artwork

Tyler Hobbs offers some valuable advice to help improve your generative artwork.

Read it

C386_pulse

2018.makemepulse.com

Some awesome little games made by the team of Makemepulse.

Check it out

C386_font

Free Font: Geizer

Inspired by horror fiction and heavy metal, Matt Cole Wilson created this awesome font.

Get it

C386_courseroot

Courseroot

A database of online courses categorized after price, difficulty, certificate quality, and more.

Check it out

C386_uxai

The UX of AI

An article about Google Clips and what it means in practice to take a human-centered approach to designing an AI-powered product.

Read it

C386_left

Left

An open source, distraction-less writing tool with auto-complete, a synonyms dictionary, writing statistics, markup-based navigation and a speed-reader.

Check it out

C386_iOS

iOS 11 UI Kit for iPhone X (Sketch)

Design+Code made this fantastic iOS 11 UI Kit for Sketch.

Get it

C386_win10

Digital Design is Never Done

Ruediger Kinast writes about how the Microsoft design team made the Windows 10 mail and calendar apps more fluent.

Read it

C386_detection

Building a real-time smile detection app with deeplearn.js and the web Shape Detection API

The first article in a series explaining how to perform face detection in the browser using deeplearn.js and the web Shape Detection API. By Jozef Maxted.

Read it

C386_fabric

Audiofabric

A fabric-like 3D audio visualization made by Taylor Baldwin.

Check it out

C386_hacker101

Hacker101

The Hacker101 video lessons aim to teach many useful things about web security.

Check it out

C386_ecommerce

Fusion E-commerce UI Kit (PSD, Sketch)

A lovely minimal e-commerce UI Kit by GateUi.

Get it

C386_greenlet2

Greenlet

With Greenlet you can move an async function into its own thread. By Jason Miller.

Check it out

C386_chess

The King vs. Pawn Game of UI Design

Erik Kennedy compares UI design to chess and shows how to use the analogy to improve your skills.

Read it

C386_jsappsecure

Building Secure JavaScript Applications

Gergely Nemeth goes through the most frequently asked questions on how to make a JavaScript application more secure.

Read it

C386_naturefont

Free Font: Nature

Zamara Reyes designed this interesting display font.

Get it

C386_webpack

Webpack Demos

A collection of simple and clear Webpack demos to get you started. By Ruan YiFeng.

Check it out

C386_keyboard

Moving efficiently in the CLI

An excellent diagram in a flashcard format for keyboard shortcuts in the command line.

Check it out

C386_webworkers

How JavaScript works: The building blocks of Web Workers + 5 cases when you should use them

The 7th article in a series that explores JavaScript and its building components. By Alexander Zlatkov.

Read it

C386_isometric

React Isometric Grids

Hung-Wei Wu made this React version of our Isometric Grids.

Check it out

C386_scalability

Awesome Scalability, Availability, and Stability Back-end Design Patterns

A curated list of selected readings to illustrate scalability, availability, and stability design patterns in back-end development.

Check it out

C386_topography

From Our Blog
Gradient Topography Animation

An organic SVG shape layer animation based on Diana Hlevnjak’s work “Gradient Topography”. Powered by anime.js.

Check it out

Collective #386 was written by Pedro Botelho and published on Codrops.