Archive

Archive for August, 2016

Image Upload and Manipulation with React

August 9th, 2016 No comments

The following is a guest post by Damon Bauer, who tackles a pretty common web developer job: offering user image uploads. I’d hesitate to call it easy, but with the help of some powerful tools that do a lot of the heavy lifting, this job has gotten a heck of a lot easier than it used to be. Damon even does it entirely in the browser!

A common thing web developers need to do is give users the ability to upload images. At first it might seem trivial, but there are things to think about when building an image upload component. Here are just some of the considerations:

  • What image types will you allow?
  • What size do the images need to be? How will that impact performance?
  • What aspect ratio should the images be?
  • How will the images be moderated? Inappropriate images be caught?
  • Where will the images be hosted? How will that be administered?

Server-side tools such as Paperclip and ImageProcessor provide a solution for most of these concerns. Unfortunately, there isn’t an off-the-shelf tool to use in a single page app (that I’ve found). I’ll show you how I solved this inside a React application that doesn’t use a server-side language at all.

Here’s a little demo of what we’ll be building:

Toolkit

The three tools I used include:

Setting Up Cloudinary

Cloudinary is a cloud-based service where you can store, manipulate, manage and serve images. I chose to use Cloudinary because it has a free tier that includes all the features I need. You’ll need at least a free account to get started.

Let’s say you want to crop, resize, and add a filter to uploaded images. Cloudinary has the concept of transformations, which are chained together to modify images however you need. Once uploaded, the transformations occur, modifying and storing the new image.

In the Cloudinary dashboard, go to Settings > Upload and select “Add upload preset” under Upload presets.

On the following screen, change “Mode” to “Unsigned”. This is necessary so you can upload right to Cloudinary without negotiating a private key using a server-side language.

Add any transformations by selecting “Edit” in the “Incoming Transformations” section. This is where you can crop, resize, change quality, rotate, filter, etc. Save the preset, and that’s it! You now have a place to upload, manipulate, store, and serve images for your app. Take note of the preset name, as we’ll use it later on. Let’s move on to the code.

Accepting User Input

To handle the image upload, I used react-dropzone. It includes features such as drag and drop, file type restriction, and multiple file uploading.

To begin, install the dependencies. In your command line, run:

npm install react react-dropzone superagent --save

Then import React, react-dropzone, and superagent into your component. I’m using the ES6 import syntax:

import React from 'react';
import Dropzone from 'react-dropzone';
import request from 'superagent';

We’ll use superagent later on. For now, in your component’s render method, include a react-dropzone instance:

export default class ContactForm extends React.Component {

  render() {
    <Dropzone
      multiple={false}
      accept="image/*"
      onDrop={this.onImageDrop.bind(this)}>
      <p>Drop an image or click to select a file to upload.</p>
    </Dropzone>
  }

Here’s a rundown of what this component is doing:

  • multiple={false} allows only one image to be uploaded at a time.
  • accept="image/*" allows any image type. You can be more explicit to limit only certain file types, e.g. accept="image/jpg,image/png".
  • onDrop is a method that is fired when an image is uploaded.

When using the React ES5 class syntax (React.createClass), all methods are “autobound” to the class instance. The code in this post uses the ES6 class syntax (extends React.Component), which does not provide autobinding. That’s why we use .bind(this) in the onDrop prop. (If you aren’t familiar with .bind, you can read about it here.

Handling the Image Drop

Now, let’s set up the method to do something when an image is uploaded.

First, set up a const for two pieces of important upload information:

  1. The upload preset ID (created automatically for you when you created your upload preset)
  2. Your Cloudinary upload URL
// import statements

const CLOUDINARY_UPLOAD_PRESET = 'your_upload_preset_id';
const CLOUDINARY_UPLOAD_URL = 'https://api.cloudinary.com/v1_1/your_cloudinary_app_name/upload';

export default class ContactForm extends React.Component {
// render()

Next, add an entry to the component’s initial state (using this.setState); I’ve called this uploadedFileCloudinaryUrl. Eventually, this will hold an uploaded image URL created by Cloudinary. We’ll use this piece of state a little bit later.

export default class ContactForm extends React.Component {

  constructor(props) {
    super(props);

    this.state = {
      uploadedFileCloudinaryUrl: ''
    };
  }

The react-dropzone documentation states that it will always return an array of the uploaded file(s), so we’ll pass that array to the files parameter of the onImageDrop method. As we only allow one image at a time, we know that the image will always be in the first position of the array.

Call handleImageUpload, passing the image (files[0]) to this method. I broke this into a separate method, following the Single responsibility principle. Essentially, this principle teaches you to keep methods compact and only do one thing.

export default class ContactForm extends React.Component {

  constructor(props) { ... }

  onImageDrop(files) {
    this.setState({
      uploadedFile: files[0]
    });

    this.handleImageUpload(files[0]);
  }

  render() { ... }

}

Handling the Image Upload and Transfer

First, use superagent to POST to Cloudinary using the two const we set up earlier. Using the .field method gives us the ability to attach data to the POST request. These pieces of data contain all the information Cloudinary needs to handle the uploaded image. By calling .end, the request is performed and a callback is provided.

export default class ContactForm extends React.Component {

  constructor(props) { ... }

  onImageDrop(files) { ... }

  handleImageUpload(file) {
    let upload = request.post(CLOUDINARY_UPLOAD_URL)
                        .field('upload_preset', CLOUDINARY_UPLOAD_PRESET)
                        .field('file', file);

    upload.end((err, response) => {
      if (err) {
        console.error(err);
      }

      if (response.body.secure_url !== '') {
        this.setState({
          uploadedFileCloudinaryUrl: response.body.secure_url
        });
      }
    });
  }

  render() { ... }

}

Inside of the .end callback, I’m logging any errors that are returned. It’s probably best to tell the user that an error occurred as well.

Next, we check if the response we received contains a URL that is not an empty string. This means that the image was uploaded and manipulated and Cloudinary generated a URL. For example, if a user was editing their profile and uploaded an image, you could store the new image URL from Cloudinary in your database.

With the code we’ve written thus far, a user can drop an image and the component will send it to Cloudinary and receives a transformed image URL for us to use.

Render, continued

The last part of the component is a div that holds a preview of the uploaded image.

export default class ContactForm extends React.Component {

  constructor(props) { ... }

  onImageDrop(files) { ... }

  handleImageUpload(file) { ... }

  render() {
    <div>
      <div className="FileUpload">
        ...
      </div>

      <div>
        {this.state.uploadedFileCloudinaryUrl === '' ? null :
        <div>
          <p>{this.state.uploadedFile.name}</p>
          <img src={this.state.uploadedFileCloudinaryUrl} />
        </div>}
      </div>
    </div>
  }

The ternary operator outputs null (nothing) if the uploadedFileCloudinaryUrl state is an empty string. Recall that by default, we set the component’s uploadedFileCloudinaryUrl state to an empty string; this means that when the component is rendered, this div will be empty.

However, When Cloudinary responds with a URL, the state is no longer an empty string because we updated the state in handleImageUpload. At this point, the component will re-render, displaying the name of the uploaded file and a preview of the transformed image.

Wrap Up

This is just the groundwork for an image upload component. There are plenty of additional features you could add, like:

  • Allowing uploading multiple images
  • Removal of uploaded images
  • Displaying errors if uploading fails for any reason
  • Using a mobile device’s camera as the upload source

So far, this set up has worked well for my needs. Having to hardcode the upload preset isn’t perfect, but I’ve yet to experience any issues with it.

Hopefully you’ve gotten an understanding of how you can upload, store and manipulate images using React without a server-side language. If you have any questions or comments, I’d love to hear them! I’ve created a repository where you can see this code in action.


Image Upload and Manipulation with React is a post from CSS-Tricks

Categories: Designing, Others Tags:

Design Bundles is Here! Premium and Free Design Resources

August 8th, 2016 No comments
the design bundle

Brought to you from the team who created FontBundles.net – Design Bundles is a design deal website created to save you money! With a fully functioning design marketplace, you can shop for individual design elements and packs with ease with items such as:

  • Backgrounds and Textures
  • Illustrations
  • SVG’s
  • Mock ups
  • Icons
  • Templates

As well as the premium products they also have a range of Free Design Resources to try and use, most with commercial licensing – so it’s not only an excellent place to shop, but a great place for your resources in general.

the design bundle

Design Bundles wouldn’t be called Design Bundles of course if there wasn’t some massive savings on bundled items involved! Their flagship bundle, available on August 8th, is appropriately named ‘The Design Bundle’ – ensuring we don’t forget the name of course! ? Packed with graphics, design elements and fonts – the bundle is truly a marvel, saving you a cool 96%!

From the success of saving customers over $8,000,000 over the past 8 months with FontBundles.net, we just know that DesignBundles.net will be a massive hit with the design community and crafters. Who doesn’t like to save money and get the very best elements to work with? After all, a great designer needs great tools!

Read More at Design Bundles is Here! Premium and Free Design Resources

Categories: Designing, Others Tags:

Everything You Need to Know About Instagram API Integration

August 8th, 2016 No comments

The following is a guest post by Emerson This. This a guide for web developers interested in integrating Instagram content on websites. It was only a few months ago when Instagram changed what was possible with their API, so this serves to explain that, what is possible now, and examples of those possibilities.

  • Part One is a quick overview of the API restrictions that came into effect June 2016, which have significantly changed the playing field.
  • Part Two is about how to get started using the API.
  • Part Three is all examples of real things you can (and can’t) do with the API.

Part One: Understanding the Instagram API in three minutes

In order to work with the Instagram API, sooner or later, you must find your way through the nebulous API client registration and authorization process. Understanding the API access limitations can prevent a lot of wasted time, because they often result in unexpected data rather than straight-forward authentication errors that are easier to diagnose.

The infamous June 2016 API restrictions

On June 1 2016, console errors lit up all over the world when Instagram significantly restricted access to its API. The first thing to understand is that it was a deliberate business decision by Instagram, designed to prevent their API from being used for a variety of purposes. Understanding this fact will not fix the errors in the console, but it makes the restrictions more intuitive to work around if you understand their intent.

Sandbox mode vs “live” mode

The gatekeeper between developers and full API access is called sandbox mode. The documentation presents it as a temporary step in the development process, but the overwhelming majority of projects will never leave sandbox mode because Instagram only grants full access to their API for a handful of very specific use cases:

  • “My app allows people to login with Instagram and share their own content”
  • “My product helps brands and advertisers understand, manage their audience and media rights.”
  • “My product helps broadcasters and publishers discover content, get digital rights to media, and share media with proper attribution.”

If you cannot convince the Instagram lords that your app serves one of these specific purposes, it will be rejected if you submit it to “Go live”. For this reason, it may be more intuitive to think of it as “sideline mode”.

What can you do while in sandbox mode?

Sandbox mode means that your API calls go to a magic island where only your last 20 posts exist. That’s it. No one else exists on the island, so you will not see results for anything you posted earlier, or from any other Instagram users, even if that content is public. You can invite additional “sandbox users” which will add them to your magic island, but just like you, only their most recent 20 posts exist on the island.

The sandbox island: only the first 20 posts

The island will never get very large because you can only have a total of ten sandbox users. Let this sink in for a moment. Anything you might want to do that involves content from the general public will not be possible in sandbox mode.

Sandbox mode vs scopes

One of the most common confusions about the new restrictions is conflating scopes and sandbox mode. Sandbox mode governs what your API requests can “see” diverting them to the magic island. Scopes govern what a specific token can and cannot be used for. Every token automatically starts with the basic scope. A token with only the basic scope can do very little, whether in sandbox mode or live. To view even public content, you will need to request the additional public_content scope. Where sandbox mode enters the picture is in determining what is included in “public content”. In sandbox mode, it will only include the posts on the magic island, whereas a live app can see anything that’s public (in the real world) on Instagram.

The most common misconception is that an app needs to be approved to “go live” in order to request scopes. This is incorrect. For example, while in sandbox mode, you need a token with the public_content scope to see posts by your other sandbox users just the same way approved (“live”) apps do1. Technically there is nothing a live app can do that cannot be done in sandbox mode, as long as it only involves users and content that lives on the magic island.

Watch out for old docs!

It is also worth mentioning that before June 2016 many API calls used to allow authentication with only a client_id from a registered client. Now all requests require an access_token. However there are still lots of plugins, documentation, and tutorials from before June 1 that have yet to update accordingly.

Part Two will show how to work within the API restrictions to set up the popular Instagram integrations that are still possible in sandbox mode.

Part Two: How to Use the Instagram API on Websites

Registering an API Client

Before you can do anything with the Instagram API you will need to register an API client as a developer. If you are not already registered as a developer you will be prompted to do so before proceeding to register a new API client.


Instagram’s Register New Client interface

The most delicate part of configuring an API client is entering the correct values in the Valid redirect URIs field. This is a whitelist of URIs which Instagram will use during the authentication workflow. The URI matching algorithm is very strict. So you need to make sure that one of the URIs you enter here is exactly the same as the URI you pass in the redirect_uri parameter when requesting a token (described below). For example, if you enter http://mysite.com/oauth and then try to request a token using mysite.com/oauth or http://mysite.com/oauth/, it will fail.

A registered API client gets assigned a client ID and a client secret. As the name implies, do not share your client secret. You will use both of these to request tokens from Instagram.

Generating an access token

As discussed above, you will need to generate a token to authenticate requests to the Instagram API. There are basically two ways to do this: you can request tokens programmatically or manually. Both approaches require you to have first registered an API client (described above).

Generating Instagram tokens programmatically using Oauth 2 workflow

Instagram’s implementation of Oauth 2 is very standard, so if you have any experience with this authentication pattern it will be very familiar. There is good documentation in the official docs which walks through the exact sequence of requests and parameters. Here’s a quick summary:

  1. Direct your user to Instagram’s authorization URL
  2. The user grants authorization
  3. Instagram redirects the user back to your site with a code
  4. Send the code back to Instagram in exchange for the token

Generating Instagram tokens manually

In situations where you do not need to access the API dynamically as different users you can generate a token manually.

If you have a tool to make POST requests and a public endpoint set up to receive the redirection from Instagram, you could generate a token by manually making each request in the previous sequence. But this can be tedious, especially for a small project where you just need one token.

The easiest way to do this is to use a token generating tool like this. Before the June 2016 restrictions kicked in, there were many resources like this to choose from, but you will find that many of them broke when the restrictions started. InstagramToken.com still works, and it also allows you to generate tokens with specific scopes (explained in Part One) which is important if you are trying to do anything besides request your own content.

How to Invite Sandbox Users

Sandbox users are other Instagram users that you invite to your client. The main reason to do this is so that your app will then be able to “see” their last twenty posts in addition to your own. This is explained in Sandbox mode vs “live” mode above.

You invite sandbox users from the Sandbox tab of the Edit Client UI.


Sandbox tab of Edit Client UI

Beware! At the time of this writing, invitees do not receive a notification when you invited them2. You will need them to log into Instagram and then visit this page. They will then have to submit a short, vague form to register as a developer. If they are not developers they will be confused by these questions. Fortunately, the answers do not seem to matter.

A quick security warning: it is not generally a best practice to make client side requests with an API token because it is like a password and can easily be read from the source code by a malicious user. However, when in sandbox mode, the tokens can do very little, so the stakes are pretty low.

How to find your user ID

It is surprisingly difficult to find a user’s numeric ID, which is necessary for many popular types of requests. There were a handful of online resources built to facilitate this, but most were broken at the time of writing this. Smash Balloon has a free tool that seems to be working at the moment. It is also not very difficult find an ID yourself if you know where to look.

To find a users numeric Instagram ID first visit the user’s public Instagram page: https://instagram.com/. View the source code of this page and locate the large block near the bottom of the page. Inside you will find a large window._sharedData object definition. The first instance of id will be the user’s numeric ID. There is also a user_id property under the owner node for each media object.


Looking at the source code of Instagram user page to find the user ID

Part Three: Recipes for Doing Stuff with the Instagram API

How to show your Instagram feed on your website

This use case is not one of the chosen few that will be approved to “go live” but fortunately this is one of the few things you can still (mostly) do while in sandbox mode. You will need a registered API client ID and an access token (both are explained above).

Let’s use the popular Instafeed library to add your Instagram feed to a website.

First download the library manually or with bower: bower install instafeed.js. Then load the scripts before the at the bottom of your page. Also insert

wherever you want the stream of images to appear.

  <div id="instafeed"></div>
  <script src="path/to/instafeed.min.js"></script>
</body>

Next you will need to initialize Instafeed with another small script telling it which posts you want to show.

  <div id="instafeed"></div>
  <script src="path/to/instafeed.min.js"></script>
  <script>
    var feed = new Instafeed({
      get: 'user',
      userId: USER_ID, // Ex: 1374300081
      accessToken: 'YOUR_ACCESS_TOKEN'
    });
    feed.run();
  </script>
</body>

This can be used to show the last 20 posts of any users that have accepted the invitation to be a sandbox user for your API client.

Why you can’t (really) show a list of tags anymore

Technically you can request posts with a particular tag. Nothing stops you from using the same workflow as shown above. Instafeed supports tag searches already, so you could just pass the following settings:

var feed = new Instafeed({
  get: 'tagged',
  tagName: 'TAG', Ex: // 'cat'
  accessToken: 'YOUR_ACCESS_TOKEN'
});

However, if you are in sandbox mode you probably will not see the results you expect!

Tags exist because they group content from different users. Remember from Part One that sandbox mode means your API requests are diverted to a magic island where only the last 20 posts by you and your few sandbox users exist. This means if you make a request for posts tagged #cat (which has ~90M posts), but you and your sandbox users have not used that tag within your last 20 posts, the API request will succeed, but return zero results.

The bottom line is that the tag feed will probably only be meaningful if you are displaying a tag that is unique and frequently used by you and your sandbox users.

How to embed a single post on your website

Instagram wants you to use their official embed widget or either of their embed endpoints, which do not require an access token.

The easiest way to get the embed widget code snippet is from the [· · ·] button in the bottom corner of a post. Click it to reveal the code snippet that you can copy/paste into your HTML.


The Instagram single photo embed code is found within this menu.

The snippet will output something like this.


What the Instagram single photo widget looks like.

If you’re thinking “but that doesn’t match the rest of my site.” That’s the point. It’s not an accident that the API doesn’t just return a URL to an image file. 😉

How to add a like or follow button

This falls in the same category of the tag feed above. Technically you can add/remove likes in sandbox mode, but there are very few use cases that make much sense because in sandbox mode your API access is restricted to your sandbox users. This means if you add a “like” or “follow” button to your site, it will only allow your sandbox users to like each others’ posts.

If the limitations of sandbox mode are not a deal-breaker, then a like button is as simple as sending a POST request to the /media//likes endpoint. The following example uses jQuery to make the HTTP request, but you can substitute your preferred tool.

<button id="like-btn" data-media-id="123456789">Like</button>

<script>
  function sendLike(event) {
    // Find the media ID in a data attribute for the button
    var mediaId = $(event.target).data('media-id');
    var token = 'YOUR_TOKEN';

    // Build the url
    var url = 'https://api.instagram.com/v1/media/';
    url += mediaId;
    url += '/likes?access_token=' + token;

    // Make the request and handle the response
    $.post(url).then(function(){
      // success
      function() { console.log('like request succeeded'); },
      // fail
      function() { console.log('like request failed'); }
    });
  }
  $('#like-btn').click(sendLike);
</script>

In this code we register a listener for a click event on the button. The callback function sendLike() finds the media ID in a data attribute of the button and uses it to build the URL before posting the request.

Conclusion

If you made it this far you understanding the Instagram API restrictions, and you know which integrations are possible while in the restrictive sandbox mode. If I missed something, drop a comment or find me on Twitter: @emersonthis.


1I suspect this confusion stems from the fact that Instagram’s client management UI has a tab that looks as if it is for requesting scopes, which is disabled while in sandbox mode. This is not how scopes are granted. Rather, this how how live apps get authorized by Instagram to request specific scopes (aka permissions) from users.

2It possible that notifications were filtered by spam, or that Instagram forgot to build this.


Everything You Need to Know About Instagram API Integration is a post from CSS-Tricks

Categories: Designing, Others Tags:

The best new portfolio sites, August 2016

August 8th, 2016 No comments

Hello readers! This month, the line between web design and art continues to blur as more designers adopt the post-modern aesthetic for their work. The concept of usability continues to gasp for breath.

We could call it “post-usable design”, perhaps. This is why I try to feature some of the more normal-but-professional-looking sites in with all of the artsy stuff.

But then, these are portfolios. This is where designers are generally going to go a bit wild. These sites are pretty good-looking all the same, so I advise you to take inspiration from the aesthetics, then figure out how to do it all with CSS and HTML alone, if you can.

Fabio Rocha

We start off with the portfolio of one Fabio Rocha. Really, I’m starting us off with an easy one. It’s nothing too complex, just simple, mostly-usable imagery and text in screen-wide sections. It’s pretty, the typography is good. Bonus points for another good use of yellow.

K Logic

And now I throw you into the deep end. K Logic is a marketing company’s portfolio site, and that’s as much as I can tell you. Oh, and their work is presented in case studies. The rest is all Arabic to me. Literally.

It’s worth a look. As a designer, I’ve been accused of making a design look too “box-y”. This shows us what a box-y site really looks like, and how well it can work. It’s also good for those of us who don’t work with RTL languages to see how other designers handle it.

Goran Filipovic

Goran Filipovic’s portfolio is elegant and stylish, with great typography. Nothing too spectacular in the layout department, but then, it doesn’t need it.

I’ll never be a fan of preloaders, especially the ones that just plain block your view if JS is turned off, but everyone who actually sees the site will be quite impressed.

Leeroy

French Canadian agency Leeroy (which sadly has nothing to do with Leeroy Jenkins) brings us a more classic-feeling design with thin fonts, lots of black, and a generally minimal aesthetic. They might depend on animation a little too much, but it’s still a pretty site.

Trama Studio

I’m a sucker for good typography and diagonal lines on a website. Trama Studio gives us both in abundance, along with great usage of color. I’m starting to see the choice to go with a carousel for your portfolio as less of a ‘brave choice’ and more like something that’s bound to break eventually, but the aesthetics of this site hit me right in my soft spot for minimalism.

Mute

Mute brings us what is almost a classic feel these days, with decent type, a full-screen masonry layout for the portfolio, ands lots of illustrations. Nothing too new, but it looks great, and their work is as inspiring as their site.

David Guba

David Guba gives us a master class in how to present a small amount of content without using huge text, or leaving the site feeling empty. It helps that his site does it all with style.

Tarful

Tarful is a web and app studio. Their site is a bit on the conventional side, but still has good UX, typography, and overall style. And they don’t depend on JS for literally everything!

Take a lesson from them on those grounds alone, portfolio designers!

Cosme Faé

Cosme Faé’s portfolio is dead simple, but oh-so-pretty. Plus, this is one of the best examples of the partially-overlaying-text-on-images trend that I’ve ever seen. The contrast, and use of a proper display font truly works wonders.

The pleasant aesthetic of that trend is not to be underestimated, but sometimes people forget the ergonomic aspect.

Mosaiko

Mosaiko takes a very… interesting approach to their portfolio. Most of their work was outsourced to them by other companies, so their actual portfolio is restricted by confidentiality terms. You have to request access to see it.

That… does make me curious, but not enough to request access for myself. But then, I don’t need to hire them.

The rest of their site is pure minimalist goodness. And I mean real minimalist.

Shawn Park

If you’re going to put animation everywhere on your site, the animation and the site had better both be smooth and beautiful. Shawn Park pulls it off, though. Seeing how some elements worked actually made me curious to see more.

I also kinda like the portfolio that can pop-over on any page when you click the link. That way, his work is the most easily-accessed part of his site, not even needing to load a separate page.

Kultar Singh

Kultar Singh’s portfolio is another of those “conventional but pretty” sites. Everything looks solid and professional, and I like the use of white space. There is the occasional odd use of asymmetry, but as a whole, it’s good, and worth a look.

Convoy Interactive

Convoy Interactive makes a bold statement with its use of bright lime green in its navigational elements. While the rest of the site looks subdued, almost plain except for some asymmetrical flourishes, the bright green just begs to be clicked on.

You know, once your eyes adjust.

Lynn Schmidt

Lynn Schmidt’s portfolio brings us back into the world of post-modern design that looks really cool, but lacks usability. All the same, the site looks good, is somewhat surprisingly responsive, and is fun to explore. Click on photos to your heart’s content.

Claudia Doms

Claudia Doms’ portfolio is one of the cleverer ones on this list. The whole thing looks like a spreadsheet. In fact, it basically is a spreadsheet of her clients, and what she’s done for them. The main difference is that this one will open up a little to show off her work.

Frankly, of all the sites on this list, I might like this one best. It’s very creative, mostly usable (once you get the idea), and fun to play with.

The only big downside is that it’s not responsive. To be fair, I’m not sure how you’d make it responsive, and keep the theme, but there you go.

Velvet

The portfolio for Velvet is largely monochromatic, and a little abstract. If I had to describe the style, it would be “grown-up grunge”, or “millennial artsy type”. It’s the kind of aesthetic embraced by those who want to look professional, but also like they’ve kept their edge.

It works, though, and is fun to explore. It’s a trip through some very artsy brains, that is still surprisingly usable.

Abby Stolfo

Abby Stolfo’s portfolio is by far the most delicious-looking on the list… by default. It’s a food styling portfolio, after all. There are galleries, of course, but you can see the quality of Abby’s work in the design alone, because bits of food are used as decorative elements.

And now I’m hungry.

OUI R

OUI R (Get it?) throws you right into their work with a carousel. In keeping with this theme, each portfolio page is designed to be browsed horizontally. It certainly sets them apart, but might throw off a user or two.

That said, it looks great, with good typography, a great use of white space, the whole thing looks modern and elegant.

Jeremy Vitte

Jeremy Vitte’s one-page portfolio embraces the collage style, with portfolio pieces scattered seemingly haphazardly over the page. I kind of like the way you can see each project as a whole in a side panel. If you’re going to use JS for layout, might as well go all the way, right?

The overall effect is both unassuming and professional, with a touch of that post-modern feel. It’s sort of saying, “Oh hi there. I’m just chilling with the work I’ve done for Vogue. Wanna see?”

Ben Pearce

Ben Pearce is a sculptor. I’d almost be disappointed if his site wasn’t minimal and post-modern. I’d take away points for the transition/preloading screens, but they’re actually kind of entertaining.

femmefatale

Design studio femmefatale goes even further by mixing elements of modern art into the design itself. Some of these are animated, and some aren’t, but it looks great.

On top of looking great, the whole thing is kept simple and usable, which makes me very happy.

Rofikul Shahin

Rofikul Shahin’s portfolio brings us back to some more traditional, but no less impressive design. Solid type mixed with bold colors draws the eye without any gimmicks. It’s good, usable work.

It’s a little weird, these days, to see a design that’s more adaptive than fluid-responsive, but that’s forgivable.

Peter Hol

Peter Hol’s one-page portfolio is part portfolio, part résumé, as it prominently features a timeline of his career so far. It’s a dead-simple site, with a mostly dead-simple design, and it’s easy on the eyes.

It’s spiced up with only simple flourishes, like the stylized border on the left, and I like that.

Font Bundle Mix: 25 Script, Brush and Display Fonts from LeoSupply – only $25!

Source

Categories: Designing, Others Tags:

A Glimpse Into The Future With React Native For Web

August 8th, 2016 No comments

One of the hardest decisions to make when starting a new app is which platforms to target. A mobile app gives you more control and better performance but isn’t as universal as the web. If you’re making a mobile app, can you afford to support both iOS and Android?

What about trying to build a mobile app and a responsive web app? Ultimately, the best experience for your customers is for your app to work everywhere, but the development and maintenance costs of that can be prohibitive.

The post A Glimpse Into The Future With React Native For Web appeared first on Smashing Magazine.

Categories: Others Tags:

Popular design news of the week: August 1, 2016 – August 7, 2016

August 7th, 2016 No comments

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.

CSS4: What’s New that You Need to Know

3 New Logo Trends to Try for your Brand

Hover is Dead. Long Live Hover

Is this the End for Mobile Apps?

SlashPixels – Google for Designers

Stop Designing Interfaces, Start Designing Experiences

How the Rio 2016 Olympics Logo was Created

Site Design: Wearesoak.com

Apple’s New Instagram Page is Digital Heaven for Those Who Love Quotes

This Software Can Turn any Single JPEG into an Animated GIF

Pantone’s Addictive New App

4 Things I Wish I’d Learned About Sketch Sooner

An Uneducated Client is an Unhappy Client

Site Design: Nytimes.com / the Olympics Issue

Google Rolls Out New Version of Google Maps – A Love Letter to Apple Maps

Photoshop Master Remakes a Masterpiece

3 Revealing Traits You Didn’t Know Influenced your Design Approach

WellDressed: An App that Suggests Outfits Based on How You Look

How Netflix Does A/B Testing.

Google’s New Tilt Brush App

Airbnb Launches its own In-house Design Studio, Samara

Dropbox’s New Headquarters has a Room for Every Mood

Photographer Files $1 Billion Suit Against Getty for Licensing her Public Domain Images

Born: A Serif Humanist Typeface for Text

Astropad 2.0: Turn your iPad into an Ultra Responsive Drawing Tablet

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

LAST DAY: 2,100 Perfect Icons in 49 Unique Categories – only $19!

Source

Categories: Designing, Others Tags:

Design Better Data Tables

August 6th, 2016 No comments

Matthew Ström on how data tables can be better through things like alignment, rules, labels, backgrounds, and the type of numerals used:

Oldstyle figures look nice in sentences, where they better match the size and spacing of lower-case letters; lining figures are more uniform, and reinforce the grid-like structure of the table.

Direct Link to ArticlePermalink


Design Better Data Tables is a post from CSS-Tricks

Categories: Designing, Others Tags:

The Atomics

August 6th, 2016 No comments
  • “Atomic” is a browser-based timeline animation tool.
  • “Atomic Design” is a design methodology in which you design very small parts and combine them in larger and larger pieces to build a whole.
  • “Atomic CSS” is a system in which you apply styles directly through designated HTML classes.
  • “Project Atomic” is something for running containerized applications, like Docker? I dunno it’s DevOps-y and above my head.
  • “Atomic Web Browser” is and old (looks abandoned) iOS web browser.

None of them have anything to do with each other, at least conceptually.


The Atomics is a post from CSS-Tricks

Categories: Designing, Others Tags:

Comics of the week #351

August 6th, 2016 No comments

Every week we feature a set of comics created exclusively for WDD.

The content revolves around web design, blogging and funny situations that we encounter in our daily lives as designers.

These great cartoons are created by Jerry King, an award-winning cartoonist who’s one of the most published, prolific and versatile cartoonists in the world today.

So for a few moments, take a break from your daily routine, have a laugh and enjoy these funny cartoons.

Feel free to leave your comments and suggestions below as well as any related stories of your own…

And watch your step

Well, maybe a small event

Personal foul

Can you relate to these situations? Please share your funny stories and comments below…

250+ Beautiful Hand-Drawn Templates, Backgrounds & Graphics – only $18!

Source

Categories: Designing, Others Tags:

Free Download: 50 unique landscape photos

August 5th, 2016 No comments

Stock images can be an expensive acquisition, so it’s always appreciated when a professional stock photographer makes their work available for free.

This awesome collection of unique, professional-grade photographs, has kindly been made available for WebdesignerDepot readers by DreamyPixel.

The bundle contains 50 images, mostly of landscapes, all in hi-res JPG format. The images range in size from 4928 x 3264 pixels, to 7360 x 4912 pixels, making them big enough even for print work. The set is divided into several categories for easy access: Landscape, Nightscape, People in Landscape, Winter, and Spring.

The images come with an extended license, meaning they can be used in personal and commercial projects, you can also use them in non-digital products that you sell, and even in digital products provided the original image can’t be extracted.

For more images like these follow Ales Kirvec’s Facebook fan page, and download these awesome free images beneath the preview:

Please enter your email address below and click the download button. The download link will be sent to you by email, or if you have already subscribed, the download will begin immediately.

CloudPress: WordPress Theme Builder, Lifetime Membership – from $27!

Source

Categories: Designing, Others Tags: