Turning complexity into clarity.

Need website designer (for Wordpress) for wireframe creation - 24 hours in budget - starting immediately - Upwork

WordPress Work From UpWork - Wed, 06/21/2017 - 17:05
We are a busy web design agency with lots of projects, large and small.  We have several projects mid-flight at various stages (wireframes, design, WP theming, testing, QA, etc.) that we need immediate help with.

The current requirement is for the following project:

---

Our Client is a software company that works with software partners dealing with Microsoft Dynamics software. Our Client's current website offers the means for customers to have their software support questions answered, albeit with some difficulty. This project is tasked with improving the user experience for typical users, allowing them to better self-serve their support requests instead of directly reaching out to Our Client. Additionally, the website will also serve as a means to confirm sales leads, driving users from internal content pages to the contact page to convert via traditional sales means.

Items needed: Create wireframes (10 total) for each of the following pages (Desktop only)
    •    Homepage
    •    Product Archive
    •    Individual Product
    •    Overall Category Landing Page (IE Support Center)
    •    Partner Resources / About Us Page
    •    Archive Page for Paginated Content (IE Videos, Whitepapers, Events, etc),
    •    Blog Index Page
    •    Blog Article
    •    FAQ / Careers Page
    •    Contact

Skills needed:
    •    WordPress, UX Design, Sketch/Illustrator/Photoshop, Slack
    •    How many hours are we allocating to this: 24
    •    When is this needed by: 6/28

Please provide a cover letter and submit a few examples of your best work to be considered.  This is an immediate position.  We need the selected bidder to start work within the next 24 hours, and deliver final, completed files no later than June 28 (1 week from today).  

Thanks,
-Steve


Posted On: June 21, 2017 20:12 UTC
Category: Web, Mobile & Software Dev > Web & Mobile Design
Skills: CSS, HTML, Web Design, Website Wireframing, WordPress
Country: United States
click to apply
Categories: WordPress Maintenance

Need two squarespace websites to be built out quickly for a Rev1 - Upwork

WordPress Work From UpWork - Wed, 06/21/2017 - 16:41
We need two medical websites that are currently on squarespace to be built out in a nice design fashion with content.  They are only 7-8 pages each of information about our businesses.  I would need the work done in 1-2 weeks.   After that there would be tweaks going forward once rev1 is complete


Posted On: June 21, 2017 20:12 UTC
Category: Web, Mobile & Software Dev > Web & Mobile Design
Skills: SquareSpace, WordPress
Country: United States
click to apply
Categories: WordPress Maintenance

Developer Needed to Build Responsive Marketplace & Membership Theme for Education Website - Upwork

WordPress Work From UpWork - Wed, 06/21/2017 - 13:19
Hi my name is Josh and I’m looking to hire a developer to build a custom, responsive membership and marketplace theme for my WordPress site.

WHO I'M LOOKING FOR

I am looking for a developer with experience developing custom WordPress membership sites, where users will be logging in, and viewing content based on their different access levels. This requires a lot of attention to detail, rigorous testing, and the ability to work around a plugin that can have many restrictions.

This site will also be taking orders through the order form, so you must have experience with SSL.

Not only must the site be built to a high standard, but you will need to make sure that the site code is optimised for both fast page load times, and search engine optimisation. Seconds costs dollars with site speed.

ABOUT THE DEVELOPMENT

This is not an average theme development job, and will require a good deal of customisation as we have to work around the membership plugin we use, called MemberMouse.

(For full details scroll to 'Important Documentation on How MemberMouse Works': https://www.dropbox.com/s/3kx4kw78m6adtjq/Marketplace%20Development%20Notes.rtf?dl=0 - You will also find details on how the theme should be built, and what's included on each page)

MemberMouse uses different shortcodes (which they call smarttags) to display/hide different content, and it has to be built in accordance with their documentation . Although I’m no developer, I do have some experience with them, and have outlined my thoughts on how this could work in the above dropbox link.

There is a total of 13 pages that need to be built, with some variations to a couple of them. You will have access to both .png and .psd files, and you can view the completed designs here: https://www.dropbox.com/sh/2ezhd9birpigyfu/AAC2fizcNDRViiWgsXggVYUxa?dl=0

We do not currently have mobile responsive designs, but responsive variations can be designed upon request - no problem.

All of the pages being built will for in a single theme on its own WordPress install, with the exception of the Blog Homepage which will be added to my current theme, as a replacement to this page: https://expertphotography.com/

For the current theme at the above address, we use a Genesis Child theme, and I've been satisfied with that, however, you're welcome to use whatever you would like.

I have done as much as I can with the development notes to provide you with everything you need to build this theme. I will be around during the build process to assist you if you have any questions, but you will have complete control over how the theme is built. I'm hoping that my detailed notes and job posting will attract top talent, and give you everything you may need.

BEFORE APPLYING FOR THE JOB

Make sure:
•you read the development notes fully, and are very familiar with task at hand before applying for this job.
•you provide at least one example of a similar WordPress theme you've built (or at least one with complex functionality that goes above the typical realm of WP theme development), for code review
•you don't send us a copy-and-paste cover letter. We're looking for a talented developer with good attention to detail and communication.


Posted On: June 21, 2017 20:12 UTC
Category: Web, Mobile & Software Dev > Web Development
Skills: PSD to Wordpress
Country: United Kingdom
click to apply
Categories: WordPress Maintenance

Website Designer - Upwork

WordPress Work From UpWork - Wed, 06/21/2017 - 10:21
Hey, I am looking for a web designer, wordpress or any other code. The content is ready.


Posted On: June 21, 2017 10:40 UTC
Category: Design & Creative > Other - Design & Creative
Skills: Web Design, WordPress
Country: Austria
click to apply
Categories: WordPress Maintenance

Wordpress site - update content in our Monstroid 2 template - Upwork

WordPress Work From UpWork - Wed, 06/21/2017 - 10:02
We have a wordpress site.
We have already installed the Monstroid 2 template (62222)
The pages are created, and we have started to update the template.  We are looking for someone to help us finish updating the content on our template.

We have created a list of all items to do.  Items include:
- Reducing padding in one section by 10%
- Change font in another section
- Ensure all images are the right size and not blurry
- Add some text/icons/buttons
- etc.

We expect there will be approximately 5-15 hours of work to complete all of the tasks.

We have lots more work for the right person!


Posted On: June 21, 2017 10:40 UTC
Category: Web, Mobile & Software Dev > Web Development
Skills: WordPress
Country: Australia
click to apply
Categories: WordPress Maintenance

Flocon de toile | Freelance Drupal: Do I have to wait for Drupal 9 for my web project?

News from Planet Drupal - Wed, 06/21/2017 - 10:00

In a previous post, we saw the Drupal 8's new policies for versioning, support and maintenance for its minor and major versions. This policy has evolved somewhat since the last DrupalCon Baltimore conference in April 2017. And this evolution of Drupal's strategy deserves a little attention because it can bring new light to those who hesitate to migrate their site on Drupal 8. Or those who are wondering about the relevance of launching their web project on Drupal 8.

Categories: Drupal

Dropsolid: Drupal 8 and React Native

News from Planet Drupal - Wed, 06/21/2017 - 09:57
21 Jun Drupal 8 and React Native Niels A Drupal 8 Tech Drupal

One day you might wake up with the next big idea that will shake the world in the most ungentle way. You decide to build an app, because you’ll have full access to all features of the device that you want your solution to work on. But then it dawns on you: you will actually need to build multiple apps in completely different languages while finding a way for them to serve the same content...

Then you start to realise that you won’t be able to step into the shoes of the greats, because web technology is holding you back. Fortunately, Drupal 8 and React Native are here to save your day - and your dream!

In this blog post you'll read how you can leverage Drupal 8 to serve as the back-end for your React Native app. 

First, however, a quick definition of what these technologies are:

  • Drupal is an open source content management system based on PHP.
  • React Native is a framework to build native apps using JavaScript and React.

If you want to read more about Drupal 8 or React Native, you're invited to check the sources at the bottom of this article.
 

Why React Native?

There are a myriad of front-end technologies available to you these days. The most popular ones are Angular and React. Both technologies allow you to build apps, but there is a big difference in how the apps will be built.

The advantage of employing React Native is that it lets you build an app using JavaScript, while converting the JavaScript into native code. In contrast, Angular or Ionic allow you to create a hybrid app, which basically is a website that gets embedded in a web view. Although the benefit here is that you're able to access the native features of a device.

In this case, we prefer React Native, because we want to build iOS and Android applications that run natively.
 

Headless Drupal

One of the big buzzwords that's been doing the rounds in the Drupal community lately is 'Headless'. A headless Drupal is actually a Drupal application where the front-end is not served by Drupal, but by a different technology.

You still get the benefits of a top notch and extremely flexible content management system, but you also get the benefits of your chosen front-end technology.

In this example, you'll discover how to set up a native iOS and Android application that gets its data from a Drupal website. To access the information, users will have to log in to the app, which allows the app to serve content tailored to the preferences of the user. Crucial in the current individualized digital world.

 

So this already brings us to our first hurdle. Because we are using a native application, authenticating users through cookies or sessions is not possible. So we are going to show you how to prepare your React Native application and your Drupal site to accept authenticated requests.
 

The architecture

The architecture consists of a vanilla Drupal 8 version and a React Native project with Redux.

The implemented flow is as following:

  1. A user gets the login screen presented on the app.
  2. The user fills in his credentials in the form
  3. The app posts the credentials to the endpoint in Drupal
  4. Drupal validates the credentials and logs the user in
  5. Drupal responds with a token based on the current user
  6. The app stores the token for future use
  7. The app now uses the token for all other requests the app makes to the Drupal REST API.
     
Creating an endpoint in Drupal

First we had to choose our authentication method. In this example, we opted to authenticate using a JWT or JSON web token, because there already is a great contributed module available for it on Drupal.org (https://www.drupal.org/project/jwt).

This module provides an authentication service that you can use with the REST module that is now in Drupal 8 core. This authentication service will read the token that is passed in the headers of the request and will determine the current user from it. All subsequent functionality in Drupal will then use that user to determine if it has permission to access the requested resources. This authentication service works for all subsequent requests, but not for the original request to get the JWT.

The original endpoint the JWT module provides, already expects the user to be logged in before it can serve the token. You could use the ready available basic authentication service, but we preferred to build our own as an example.
 

Authentication with JSON post

Instead of passing along the username and password in the headers of the request like the basic authentication service expects, we will send the username and password in the body of our request formatted as JSON.

Our authentication class implements the AuthenticationProviderInterface and is announced in json_web_token.services.yml as follows:

services: authentication.json_web_token: class: Drupal\json_web_token\Authentication\Provider\JsonAuthenticationProvider arguments: ['@config.factory', '@user.auth', '@flood', '@entity.manager'] tags: - { name: authentication_provider, provider_id: 'json_authentication_provider', priority: 100 }

The interface states that we have to implement two methods, applies and authenticate:

public function applies(Request $request) { $content = json_decode($request->getContent()); return isset($content->username, $content->password) && !empty($content->username) && !empty($content->password); }

Here we define when the authenticator should be applied. So our requirement is that the JSON that is posted contains a username and password. In all other cases this authenticator can be skipped. Every authenticator service you define will always be called by Drupal. Therefore, it is very important that you define your conditions for applying the authentication service.

public function authenticate(Request $request) { $flood_config = $this->configFactory->get('user.flood'); $content = json_decode($request->getContent()); $username = $content->username; $password = $content->password; // Flood protection: this is very similar to the user login form code. // @see \Drupal\user\Form\UserLoginForm::validateAuthentication() // Do not allow any login from the current user's IP if the limit has been // reached. Default is 50 failed attempts allowed in one hour. This is // independent of the per-user limit to catch attempts from one IP to log // in to many different user accounts. We have a reasonably high limit // since there may be only one apparent IP for all users at an institution. if ($this->flood->isAllowed(json_authentication_provider.failed_login_ip', $flood_config->get('ip_limit'), $flood_config->get('ip_window'))) { $accounts = $this->entityManager->getStorage('user') ->loadByProperties(array('name' => $username, 'status' => 1)); $account = reset($accounts); if ($account) { if ($flood_config->get('uid_only')) { // Register flood events based on the uid only, so they apply for any // IP address. This is the most secure option. $identifier = $account->id(); } else { // The default identifier is a combination of uid and IP address. This // is less secure but more resistant to denial-of-service attacks that // could lock out all users with public user names. $identifier = $account->id() . '-' . $request->getClientIP(); } // Don't allow login if the limit for this user has been reached. // Default is to allow 5 failed attempts every 6 hours. if ($this->flood->isAllowed('json_authentication_provider.failed_login_user', $flood_config->get('user_limit'), $flood_config->get('user_window'), $identifier)) { $uid = $this->userAuth->authenticate($username, $password); if ($uid) { $this->flood->clear('json_authentication_provider.failed_login_user', $identifier); return $this->entityManager->getStorage('user')->load($uid); } else { // Register a per-user failed login event. $this->flood->register('json_authentication_provider.failed_login_user', $flood_config->get('user_window'), $identifier); } } } } // Always register an IP-based failed login event. $this->flood->register('json_authentication_provider.failed_login_ip', $flood_config->get('ip_window')); return []; }

Here we mostly reimplemented the authentication functionality of the basic authorization service, with the difference that we read the data from a JSON format. This code logs the user into the Drupal application. All the extra code is flood protection.

Getting the JWT token

To get the JWT token we leveraged the REST module, and created a new rest resource plugin. We could have used the endpoint the module already provides, but we prefer to create all our endpoints with a version in it. We defined the plugin with the following annotation:

/** * Provides a resource to get a JWT token. * * @RestResource( * id = "token_rest_resource", * label = @Translation("Token rest resource"), * uri_paths = { * "canonical" = "/api/v1/token", * "https://www.drupal.org/link-relations/create" = "/api/v1/token" * } * ) */

The uri_paths are the most important part of this annotation. By setting both the canonical and the weird looking Drupal.org keys, we are able to set a fully custom path for our endpoint. That allows us to set the version of our API in the URI like this: /api/v1/token. This way we can easily roll out new versions of our API and clearly communicate about deprecating older versions.

Our class extends the ResourceBase class provided by the REST module. We only implemented a post method in our class, as we only want this endpoint to handle posts.

public function post() { if($this->currentUser->isAnonymous()){ $data['message'] = $this->t("Login failed. If you don't have an account register. If you forgot your credentials please reset your password."); }else{ $data['message'] = $this->t('Login succeeded'); $data['token'] = $this->generateToken(); } return new ResourceResponse($data); } /** * Generates a new JWT. */ protected function generateToken() { $token = new JsonWebToken(); $event = new JwtAuthIssuerEvent($token); $this->eventDispatcher->dispatch(JwtAuthIssuerEvents::GENERATE, $event); $jwt = $event->getToken(); return $this->transcoder->encode($jwt, array()); }

The generateToken method is a custom method where we leverage the JWT module to get us a token that we can return. 
 
We do not return a JSON object directly. We return a response in the form of an array. This is a very handy feature of the REST module, because you can choose the formats of your endpoint using the interface in Drupal. So you could easily return any other supported format like xml, JSON or hal_json. For this example, we chose hal_json. 

Drupal has some built-in security measures for non-safe methods. The only safe methods are HEAD, GET, OPTIONS and TRACE. We are implementing a non-safe method, so we have to take into account the following things:

  • When the app does a post it also needs to send a X-CSRF-Token in the header to avoid cross site request forgery. This token can be gotten from /session/token endpoint.
  • In case of a POST we also need to set the Content-type request header to “application/hal+json” on top of the query parameter “_format=hal_json”.
Putting things together

The only thing left is to enable our endpoint through the interface that the rest modules provides on /admin/config/services/rest.

As you can see, we’ve configured our token endpoint with our custom json_authentication_provider service and it is available in hal_json and json formats.

Calling the endpoint in our React Native application The login component

Our login component contain two input fields and a button.

this.setState({username})} placeholderTextColor="#FFF" style={styles.input} /> this.setState({password})} style={styles.input} /> this.login({ username: this.state.username, password: this.state.password })} > Get Started

When we click the login button we trigger the login action that is defined in our bindActions function.

function bindActions(dispatch) { return { login: (username, password) => dispatch(login(username, password)), }; }

The login action is defined in our auth.js:

import type { Action } from './types'; import axios from 'react-native-axios'; export const LOGIN = 'LOGIN'; export function login(username, password):Action { var jwt = ''; var endpoint = "https://example.com/api/v1/token?_format=hal_json"; return { type: LOGIN, payload: axios({ method: 'post', url: endpoint, data: { username: username, password: password, jwt: jwt, }, headers: { 'Content-Type':'application/hal+json', 'X-CSRF-Token':'V5GBdzli7IvPCuRjMqvlEC4CeSeXgufl4Jx3hngZYRw' } }) } }

In this example, we set the X-CSRF-token fixed to keep it simple. Normally you would get this first. We’ve also used the react-native-axios package to handle our post. This action will return a promise. If you use the promise and thunk middleware in your Redux Store you can set up your reducer in the following way.

import type { Action } from '../actions/types'; import { LOGIN_PENDING, LOGOUT} from '../actions/auth'; import { REHYDRATE } from 'redux-persist/constants'; export type State = { fetching: boolean, isLoggedIn: boolean, username:string, password:string, jwt: string, error: boolean, } const initialState = { fetching: false, username: '', password: '', error: null, } export default function (state:State = initialState, action:Action): State { switch (action.type) { case "LOGIN_PENDING": return {...state, fetching: true} case "LOGIN_REJECTED": return {...state, fetching: false, error: action.payload} case "LOGIN_FULFILLED": return {...state, fetching: false, isLoggedIn: true, jwt:action.payload.data.token} case "REHYDRATE": var incoming = action.payload.myReducer if (incoming) return {...state, ...incoming, specialKey: processSpecial(incoming.specialKey)} return state default: return state; } }

The reducer will be able to act on the different action types of the promise:

  • LOGIN_PENDING: Allows you to change the state of your component so you could implement a loader while it is trying to get the token.
  • LOGIN_REJECTED: When the attempt fails you could give a notification why it failed.
  • LOGIN_FULFILLED: When the attempt succeeds you have the token and set the state to logged in.

So once we had implemented all of this, we had an iOS and Android app that actually used a Drupal 8 site as it main content store.

Following this example, you should be all set up to deliver tailored content to your users on whichever platform they may be.

The purpose of this article was to demonstrate how effective Drupal 8 can be as a source for your upcoming iOS or Android application.
 

Useful resources:

 

More articles by our Dropsolid Technical Leads, strategist and marketeers? Check them out here.

Categories: Drupal

I need a designer/content creator for a landing page/website in Wordpress/Wix/Joomla - Upwork

WordPress Work From UpWork - Wed, 06/21/2017 - 09:41
Marketing website landing page required.  Content creation plus design.
Copywriting/content marketing skills.  
Ability to use free, high-quality non-copyright images to create ad and pop-ups.
Ideally experience in high converting ads/websites.  
Please submit examples of your work with application.


Posted On: June 21, 2017 10:40 UTC
Category: Writing > Web Content
Skills: Content Writing, SEO Writing, Web Design, Website Development, WordPress
Country: Malaysia
click to apply
Categories: WordPress Maintenance

Systems Developers / Analysts - Attain Solutions - Vancouver, BC

Drupal Jobs from Indeed - Wed, 06/21/2017 - 09:26
Our Vancouver/Edmonton offices are looking for talented Systems Developers / Analysts to join our rapidly growing solutions delivery team....
From Attain Solutions - Wed, 21 Jun 2017 09:26:32 GMT - View all Vancouver, BC jobs
Categories: Drupal

WordPress Designer - Need a Fast Corporate Site Migrated - Upwork

WordPress Work From UpWork - Wed, 06/21/2017 - 03:53
We have an existing site that is running slow and is also outdated.

We already have a new server setup and the content moved over, but need to get the design refreshed.

This is a WordPress site, which needs to be fast and responsive, also supporting AMP technology.

We have approximately six different page "types" on the site currently but are open to either more or less depending on your recommendations.

If you are a pure designer and will provide the design in PSD or AI, please indicate in the application. Also, if you are offering full-service (ie - theme install, configure, etc) please let me know.

We are open to either option.

However, we prefer using a commercial "base" theme of some sort that will be modified rather than starting from scratch. If you have experience designing or implementing any specific theme that works well, we are all ears.

Please let me know if you are interested and I will send you our URL for review.


Posted On: June 21, 2017 10:40 UTC
Category: Web, Mobile & Software Dev > Web & Mobile Design
Skills: Adobe Photoshop, CSS, CSS3, Graphic Design, HTML, HTML5, JavaScript, jQuery, PHP, Web Design, Website Development, WordPress
Location Requirement: Only freelancers located in the United States may apply.
Country: United States
click to apply
Categories: WordPress Maintenance

SEO Content Writer for Wordpress blog - Upwork

WordPress Work From UpWork - Tue, 06/20/2017 - 22:52
I need someone to write blog posts of the podcasts that we produce.  It is important to model them around certain keywords, and that they have a lot of experience in SEO.  Thank you!


Posted On: June 21, 2017 01:12 UTC
Category: Sales & Marketing > SEO - Search Engine Optimization
Skills: Adobe InDesign, Business Writing, Content Writing, Internet Marketing, Report Writing
Country: United States
click to apply
Categories: WordPress Maintenance

Intermediate NodeJS Developer - Vancouver - Meta-Universe Technology Inc. - Vancouver, BC

NodeJS jobs - Tue, 06/20/2017 - 22:09
*ClickDishes Inc. - Intermediate Node.js Software Developer* We are ClickDishes, a new and fast-growing start-up company based in Calgary, Alberta striving
From Indeed - Tue, 20 Jun 2017 22:09:42 GMT - View all Vancouver, BC jobs
Categories: NodeJS

Front End Developer - Istuary Innovation Group - Vancouver, BC

NodeJS jobs - Tue, 06/20/2017 - 22:05
*Company Description* Istuary Innovation Group leverages the technical talent and capital available in North America to build technology and companies. We
From Indeed - Tue, 20 Jun 2017 22:05:36 GMT - View all Vancouver, BC jobs
Categories: NodeJS

Install Facebook Pixel on Wordpress site with content id. - Upwork

WordPress Work From UpWork - Tue, 06/20/2017 - 21:42
Install Facebook Pixel on Wordpress site with content id.


Posted On: June 21, 2017 01:12 UTC
Category: Sales & Marketing > Other - Sales & Marketing
Country: United States
click to apply
Categories: WordPress Maintenance

EXPERT Wordpress Developer - Upwork

WordPress Work From UpWork - Tue, 06/20/2017 - 20:03
I am redesigning a client's company Real Estate management website. The header and some of the work has already been completed - using WordPress.

I need a quote of approx. how many hours and a rate per hour for the development, including two pages of forms (not design) I will do that... of a 16 page site. I will provide the content including; the template, copy, images, layout and overall design mocked-up in Photoshop.


Posted On: June 21, 2017 01:12 UTC
Category: Web, Mobile & Software Dev > Web Development
Skills: CSS, Website Development, WordPress
Country: United States
click to apply
Categories: WordPress Maintenance

Elevated Third: Recorded Webinar: A Decoupled Drupal Story

News from Planet Drupal - Tue, 06/20/2017 - 19:30
Recorded Webinar: A Decoupled Drupal Story Recorded Webinar: A Decoupled Drupal Story Tue, 06/20/2017 - 13:30

We teamed up with Acquia to present “A Decoupled Drupal Story: Powdr Gives Developers Ultimate Flexibility To Build Best CX Possible.” The webinar aired in June but you can view the recording here anytime.

As the internet and web-connected devices continue to evolve, so do the needs to develop and render content. Given today’s rate of change, organizations are using decoupled architecture to build applications - giving them flexibility to accommodate any device or experience.

In this session, we’ll cover Powdr, a ski resort holding company. To give its developers the freedom to use the right front-end tools needed for any given use case, Powdr built its 17 ski resort websites on one decoupled Drupal platform. Join Elevated Third, Hoorooh Digital and Acquia to learn:

  • How a custom Drupal 8 solution cut implementation time in half vs Drupal 7

  • The ease in which Drupal 8’s internal REST API can be extended to fit a client's needs

  • The details of handling non-Drupal application routing on Acquia's servers

 

If you are considering a decoupled Drupal implementation, let’s talk.

Categories: Drupal

David Lohmeyer's Blog: Clean up database pollution from the migrate Drupal module

News from Planet Drupal - Tue, 06/20/2017 - 19:29

I'm working on a large, complex migration from Drupal 7 to Drupal 8 right now. One thing I noticed is that the migrate modules pollute the database with an unreal number of tables which allow migrations to be re-run, etc. Well if you don't need that, here's how to remove these tables. Currently the migrate modules don't clean up after themselves. Put this in a custom module or PHP script that has bootstrapped Drupal. Note this code only works in Drupal 8. Shown is a .install file for a custom module. If you uninstall the custom module, it will run the cleanup:

Categories: Drupal

Junior Web Developer - Loomo Marketing - Vancouver, BC

Drupal Jobs from Indeed - Tue, 06/20/2017 - 18:40
= 1 year of experience as a web developer in an agency environment or freelance. Loomo is looking for a talented part-time junior web developer to create...
From Indeed - Tue, 20 Jun 2017 18:40:29 GMT - View all Vancouver, BC jobs
Categories: Drupal