Move San José

@Corinne and I built Mobility SJ for the City of San José Department of Transportation!

I just got through a grueling content audit just now, so I’m gonna keep this sparse, but feel free to ask me anything about the site! :slight_smile:


  • Accessible, responsive, low-resource usage
  • Feedback and engagement; surveys, updates, eventually interactive mapping projects and guided virtual tours
  • Multilingual! Whaaaat? We are still getting content translated and working out the editorial workflow for that, but currently you can check out and switch between languages to see it in action. Folks get to read the site in their native language without ever hitting a Google Translate button!
    • Translations are done onsite, next to the content!
  • Respects the visitors: embeds (videos, map tiles) are the only third-party scripts.
  • Newsletter/email campaigns done onsite (we really care about our visitors!)
  • The site is fast as hell. Like, seriously.



hey, thank you for sharing! this is badass!!!

looking at the first link, Naglee Avenue Online Community Meeting!

  • it’s really cool that yall rolled your own survey form! can i ask what it … is? like, is it really just an html form? i guess i could look. who can see the answers? how did you protect against spam? (some hosted form services use captchas!)
  • the video is a vimeo embed, right? was this an “at least it isn’t youtube” kind of moment or does vimeo also have pros to it? was the use case more suited to a vimeo-type piece of tech than self-hosting a video stream? (i’ve worked on video players and it’s kinda scary how it’s basically some random software engineer with who knows what experience google searching for free javascript video player libraries that do what the product manager wants it to do because our that’s what our competitor’s sites do and how come ours can’t be as good lol)


  • the vietnamese translation seems to be a different “site” or “page” or “section” or whatever, accessible at /vi. yes! and i see the /es/[slug] convention in Naglee Avenue Project Summary - Mobility SJ . i really like this design decision (having the language in the URL, as a mind-folder for the content). it’s better than setting a cookie via a dropdown in the site footer, or setting a url parameter, both of which are things i’ve done as a software engineer at a job. rofl. oh, i’ve also tried to detect the web browser’s language; does mobility sj do that?

it really is fast as hell!!! it’s also clean and super readable! :sunflower:

1 Like

It is Gravity Forms and associated plugins. So all inside of WordPress.

Each Effort has one or more PMs (Project Manager), and generally the survey feedback generates a report they parse. One cool thing: we are coaching them on sharing their findings, and continuing the discussion beyond a single encounter. Each effort has an email subscription (and RSS feed, though I haven’t really plopped that anywhere yet…), which are lists inside the onsite mailing list plugin, so we can tag email outreach to show folks updates on the projects they are tracking. Our hopes is the PMs will further the discussion via posts and eventually comments there as well.

We also have plans for other kinds of feedback, similar to what we did at, where we are sharing public feedback and hosting structured discussions (in that case, geo-tagged and lightly categorized by “type” of feedback). In that case anyone will read it. :slight_smile:

There isn’t much value is spamming a form for a city government. It isn’t really ever a problem for me, and my theory is because I build sites that have immediate value, and therefore can’t be gamed easily. Also also, our forms are sometimes super complicated, a way to catch automated scripts and waste their resources at scale (think of loading a huge form each time a known bot from an IP accesses), so spammers tend to avoid them.

If I had to captcha it I’d probably just use some service or machine-based thing on the backend, rather than block or put up a barrier. It’s fairly easy to find legit feedback, even in a deluge of crap.

Hosting a video file is the tiniest part of publishing a video. There’s transcoding to the several formats and sizes that will be served to various devices, then your mention of javascript library to do the player stuff (though I like browser defaults these days), and then the potential to bottom out on bandwidth if a video gets linked and watched a bunch… I could go on and on. So many little decisions.

It’s similar to me using a mail delivery service for email: I could run my own service, but it’s distinctly different from the needs of a normal, static image and text publishing system. Same with video.

Even now it’s not perfect: the Vimeo embed for WordPress has a known issue where it adds padding above and below the video on mobile. I’m sure folks are irritated about that and it will get fixed soon, but it demonstrates how difficult it is to get video to everyone on their device.

When I posted video to my WordPress site I would just upload WebM files and link to them directly. Firefox and my friends could see them, I was fine. In this case I want to hit as many device profiles as possible, to really get impact for my effort, so our videos inform folks in SJ of what’s happening on their street.

As for Vimeo vs YouTube, Vimeo has community features or whatever, but it’s for video producers to host, edit, track, and promote their work. It has an entry level tier, but it’s functionality is a paid service, and it does what it says. YouTube is a garbage fire that distracts people and creates insane monitization schemes that encourage the worst behavior in people.

I know that sounds harsh, but they aren’t really the same thing.

Also, Vimeo has a huge amount of bullshit functionality as well, we just aren’t using it. We literally need a reliable company to host and embed our video. As a vendor we can switch it out at some point in the future, something I plan to do if I discover/build a replacement that further aligns with our values. :slight_smile:

Yeah… kinda. I’m still playing with it (we didn’t have enough translations until recently to navigate the site in a different language…). It’s tough, because if we don’t have something translated yet, we want the browser to have something to do, even if that’s letting the user translate the page on their own.

We’ll be gathering feedback from our community partners that have actual experience navigating multilingual sites and adjusting it from there. :slight_smile:

I know, right! Currently I’m helping guide the editorial processes, and I’m ensuring all media uploaded in prepared for a good web experience, and it’s really showing! The site is also served to folks via a CDN, completely! So each page is cached, and since most folks are from SJ, it is always hot for them. :sunglasses:

I know very little about what differentiates CDNs other than the little features they provide around the actual CDN itself (like DDOS protection, etc.). Can you talk about why you went with KeyCDN?

Vis-à-vis spam, seems like Gravity Forms supports using a honeypot field, where you have a hidden-for-humans field that will cause the form submission to be dropped if that field is filled. Humans can’t see it so they never know it’s there, bots see it and compulsively fill it, outing them as bots.

Glad to see you’re using Matomo, more non-Google analytics needs love!

Really great work!

1 Like

My experience is there is a mostly standard set of evolving CDN features, and most providers meet them. I chose KeyCDN because of company location (Switzerland) and straightforward pricing.

The locations, network, cost, etc. are all fine.

Been building forms with GF for ten years, never once used the honeypot. No captchas, either. Lends me to think the subject matter of my sites are not very sexy. :slight_smile:

To their credit, Matamo has really upped their game. I’m used to running an instance, and even using it to process log dumps directly from Apache so there’s no client interaction outside the session. But Matamo is run as a WordPress plugin.

Ahem: Matamo is run as a WordPress plugin.

The whole thing! It runs inside WordPress!

I wouldn’t recommend that for most WP sites (it is writing the log), but the site is fully served from the CDN, so the kinda beefy server is just sitting there most of the time. :slight_smile:

And of course I anonymize the hell out of the stats, and set up goals for filling out surveys, and everyone gets the relevant data without us just inciditenally selling our visitors data. I’m happy with it.


Wanted to note we switched domains, it is now Move San José at :slight_smile:

1 Like