Git Product home page Git Product logo

jamstack.org's Introduction

Jamstack

This is the repo for https://jamstack.org

An entry-point for learning about this architectural model. A place to learn what Jamstack is, for sharing tools, tips, examples and articles. This is also a place to find a local community meetup, or to seek support in starting one of your own.

Contributing resources

We've collected a set of videos, presentation, articles and other learning resources about Jamstack. You can contribute content to that pool of resources!

We accept contributions submitted as pull requests.

Contribute links to resources

To contribute a link to a resource:

  1. Create a new md file in the src/site/resources folder with a unique and descriptive name. Populate that file according to the structure shown below.
  2. For presentations and video, add an optional thumbnail image to the src/site/img/cms folder. (Image should be a jpeg 600px wide and 400px tall)
  3. Submit a pull request

resource md reference:

---
title: Resource title
date: Publish date (YYYY-MM-DD)
link: the URL of this resource
thumbnailurl: /img/cms/resources/resource-thumbnail.jpg
type:
  - article (Help us group and sort the resources by type article|video|presentation)
---

Before submitting a pull request, or if you are suggesting/contributing code or content changes, it is wise to preview your change in a local build. We've tried to make the process of running a local build as low as possible.

Running a local build

Prerequisites

Installing and running the build

# Clone this repository to your local environment
git clone [email protected]:jamstack/jamstack.org.git

# move in to your local site folder
cd jamstack.org

# install the dependencies
npm install

# run the build and dev server locally
npm start

Styling with TailwindCSS

This site uses TailwindCSS to offer utility CSS classes and provide a rapid means to styling the site. This means that most styling can be done without writing any additional CSS. Instead, utility classes can be added directly to the HTML. This can provide some very rapid development and also offer surprising levels of familiarity for these used to working in this way (since the conventions and classes are not per site.)

While running/developing locally, the npm run start command will generate the site including the CSS pipeline from Tailwind.

Global CSS utilities.

A small number of bespoke CSS rules are provided for efficiency of repeated or global classes. These reside in src/css/tailwind.css but these should be used sparingly, with most styling taking place in the HTML via Tailwind's utility classes.

Dev vs prod

During a production build, the CSS pipeline includes a step to remove all unused CSS statements and compress the resultant CSS. For development efficiency, this step is not performed during local development via the npm run start command. You can preview an optimised production build by running these commands:

# Run a production build
npm run build

# Serve the build locally
npm run start

One-click clone and deploy

You can clone this repository and bootstrap it as a test site of your own, complete with the CI/CD build pipeline on Netlify by clicking the button below. (Requires free GitHub and Netlify accounts)

Deploy to Netlify

jamstack.org's People

Contributors

abea avatar aerphanas avatar akardet avatar anuran-roy avatar biilmann avatar domitriusclark avatar georgedoescode avatar hexagoncircle avatar huguestennier avatar imoclub avatar jlengstorf avatar kuangthien avatar lynnandtonic avatar mcastres avatar mesalu avatar mrvautin avatar noraj avatar omershamay avatar onicholsoncc avatar philhawksworth avatar rahulkumarsingh73690 avatar raveling avatar sanmak avatar scottmathson avatar sergeyre avatar steve-keep avatar tabar avatar tcyrus avatar theremix avatar zachleat avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

jamstack.org's Issues

[accessibility] update accessible names/roles for images

👋 hi, I noticed that many of the images are missing accessible names via alt text. This is a problem for screen reader users, and in some cases dictation users. Rather than enumerate all the locations here, I'll open a PR here.

Discussion: Tech choices for jamstack.org v2

Discussion: Tech choices for jamstack.org v2

Goals of this issue

  • Share the current suggested tooling for the next iteration of jamstack.org
  • Invite comments from the community to help steer some of the decisions
  • Together, identify an approach which best serves the functional needs of the site, and also presents the most efficient and accessible approach to including content and implementation contributions from the community

High level requirements

  • Generation of a site using suitable static site generator or similar build automation
  • A development pipeline which can be simply and confidently replicated by contributing developers
  • A resultant site which embodies sound JAMstack principles:
    • Complete, viable views generated at build-time
    • No dependency on client-side JavaScript for core content
    • A Progressive Enhancement approach to any additional feature requiring client-side JavaScript
    • A site deployable entirely to a CDN (provided for the project by Netlify)
  • A low barrier to participation in terms of technical expertise

Suggested tools

SSG: Eleventy

Eleventy has the following properties which I think make it a good candidate for this project:

  • Simple to bootstrap. Since it is entirely JavaScript and easily provisioned via an npm install developers do not have to leave the comfort of node and local JavaScript to configure their environments.
  • Framework-free. Eleventy does not yield or require a JavaScript framework as part of its output. This mean that there are fewer concepts to understand and maintain than with other, more functionally powerful, but complex options.
  • Explicit and straightforward. Eleventy only outputs what is explicitly defined meaning that it can be more approachable and maintainable for a broader group of developers.
  • Templating options. Support for many templating syntaxes makes it more likely that we can select one that has good community appeal.
  • Compilation speed. Although this site is not likely to have thousands of pages, compilation speed can still impact developer experience and deployment optimisations. Eleventy has speedy build times.

Templating: Nunjucks or Liquid

Both of these options are:

  • Popular and well documented.
  • Expressive enough to support the site features we might want. But not too complex.
  • Have useful template inheritance.
  • Extensible through Eleventy.
  • Relatively simple to read and comprehend.

My personal preference is for Nunjucks, just because I really like its syntax. But more people might be familiar with Liquid which could make it a more obvious choice.

CSS: TailwindCSS

Potential hot-drama in this recommendation!

Approaches to structuring and maintaining CSS vary differently. And maintaining CSS over a long period of time and with a disparate group of contributors can quickly become difficult. With TailwindCSS we have the ability to build on utility classes which transcend not only projects, but also entire development teams. I submit that using this will bring:

  • Fewer reasons for people to need to write any CSS at all as part of their code contributions
  • A basis for good structural conventions by default
  • A simple build pipeline yielding optimized, purged CSS
  • A more intuitive development experience when adding visual components for those familiar with TailwindCSS

Possible resistance to using Tailwind might be:

  • It adds lots of css classes into your markup. (this can be mitigated, but still..!)
  • Not everyone knows it, but people know CSS
  • and probably more

Onwards

...I'm keen to discuss these things and get opinions here in this issue. I feel it would be a good choice, but anticipate some debate.

Any strong feelings or suggestions to voice? Your contribution to the discussion is much valued.

Discussion: evolving the JAMstack branding design

When the team at Netlify first created the branding for the jamstack.org site, its needs were rather different. In the time since then, jamstack has grown to include:

  • Dozens of community meetup groups
  • JAMstack Conferences
  • Adoption into the parlance of many services and organisations
  • References in technical writing
  • A community slack

...and much more.
As the category scales, so too should the identity.

This issue exists to:

  • Share the criteria and requirements for an updated logo and branding for JAMstack.
  • Share some of the design iterations and thinking
  • Invite feedback
  • Show the current work in progress

Logo mark requirements and considerations

  1. Logo artwork needs to be versatile, and hold up at a variety of sizes and applications (digital, print, embroidery, screen printing, etc)
  2. Logo color considerations:
    • Logo needs to work in flat color (no gradients or halftones)
    • Logo needs to have both a two-color version with a one-color alternate.
    • Logo should also support knockout applications (white logo on dark backgrounds)
  3. Logo needs to have both a jewel (think) and the wordmark (think the world "Apple").
  4. Logo needs to be designed to allow for three variations when considering the jewel of the logo and the wordmark of the logo:
    • Jewel to the left, wordmark to the right (horizontal version)
    • Jewel centered above the wordmark (vertical version)
    • Jewel alone, independent of the wordmark (simple "favicon" version)
  5. Jewel of the logo should allude in some manner to a stack of three components
  6. Logo needs to be vector shapes only, to support SVG format for web / digital and EPS format for print applications.
  7. Logo should feel modern, as JAMstack is a modern approach to building web applications
  8. Logo should feel at home alongside jamstack ecosystem logos as well as logos for enterprise services like AWS.
  9. Logo shape should not be confusingly similar to other logos in the general ecosystem
  10. Logo colors should be fairly unique in the space. (In our ecosystem research, blues, greens, purples, and reds seemed to be the most widely used among ecosystem partners.)

Error with node 11+

Attempting to yarn start with node 12 and I ran into errors. I dropped down to node 10.0.0 and it worked. Just an FYI.

jamstack.org git:(master) ✗ yarn start              
yarn run v1.17.3
$ gulp server
[16:00:25] Failed to load external module @babel/register
[16:00:25] Requiring external module babel-register
fs.js:27
const { Math, Object } = primordials;
                         ^

ReferenceError: primordials is not defined

Nav looks broken

Hi team! The nav on secondary pages of the site appears broken:

Need someone to help as an admin

Hey Guys,

Just checking if you guys are looking for someone to look over the prs and merge new ones.

Will be happy to help. Have one open as we speak.

All the best :)

Sitemap errors

https://jamstack.org/sitemap.xml referencing DEPLOY_PRIME_URL as base url for the site and subdirectory pages, causing invalid <loc> throughout the sitemap file.

Sitemap isn't formatted correctly for submission to tools like Google Search Console and crawl-ability then broken for bots trying to follow these referenced paths.


Generated sitemap file markup:

current jamstack.org/sitemap.xml

Discussion: Information architecture for jamstack.org v2

Discussion: Information architecture for jamstack.org v2

A new version of the jamstack.org site is coming. There is already discussion about the planned technical approach which you may be interested in

Goals of this issue

  • Share the proposed IA for the next iteration of jamstack.org
  • Invite comments from the community to help steer the work and not miss any good insights.
  • Decide the high-level content structure for the next release
  • Identify any longer term content aspirations

High level content requirements

jamstack.org should:

  • Give a clear, concise definition of what jamstack is
  • Describe benefits of jamstack
  • Pave the way for people to start using jamstack architectures
  • Present well organised and discoverable content and resources from the community
  • Help people discover and engage with local jamstack communities
  • Provide resources to people looking to start a jamstack community group in their own area
  • Present a recognisable identity for jamstack which can be easily adopted by all

Proposed high-level content structure

  • home
  • resources
  • examples
  • community
    • existing meetups
    • creating a meetup
  • Glossary
  • Code of conduct

Page purposes

A short description of the purpose of each page in the site structure to help define the requirements for each page type.

Home (/)

  • "Onesheet" definition and explantation of what JAMstack is.
  • Quickly summarise the primary benefits of jamstack
  • Surface recent or highlighted content and resources
  • Demonstrate an active community and make it easy to participate
  • callout upcoming regional and international events

Resources (/resources)

  • Show curated resources from the community
  • Demonstrate that there is regularly new content being generated by the community to grow confidence in the adoption
  • Publicise visible companies in the ecosystem?

Examples and case studies (/examples)

  • showcase examples of jamstack sites
  • show both high volume of sites, and also notable implementation, brands, capabilities
  • surface tools and technologies used in example sites
  • invite contributions from those building jamstack sites and services

Community (/community)

  • Inform about the number, and locations of, active meetups
  • Give guidance on creating a new meetup. Inform about support for groups
  • Advertise upcoming meetup events
  • Distribute content from recent meetups
  • Promote the community slack to help grow the conversation

Glossary (/glossary)

  • Gather definitions of common relevant terms
  • Provide clarity and references
  • Help combat FUD
  • Provide easy process for additional contributions and amends

Code of conduct (/code-of-conduct)

  • publish a code of conduct for participant at meetups, and in the slack
  • inform participants how to report issues

First page render performance?

Hi all!

I was looking into this and it seems like server-side rendering is pretty much eschewed by JAMstack:

Any project that relies on a tight coupling between client and server is not built with the JAMstack. This would include:

A single page app that uses isomorphic rendering to build views on the server at runtime.

How do you reconcile this with the "Better Performance" claim on the JAMstack manifesto? Or is JAMstack not intended for sites with a lot of dynamic content on the first render?

Do you guys think it's possible to reconcile loosely-coupled client/server architectures, with server-side rendering? Maybe using some kind of thin layer to do the initial render but still expose all of the data via apis?

Need examples of JAMstack

This comes a lot when I mention JAMstack as a thing, but there is not a place to point a person to view a "JAMstack" site or their source code.

How about Functional + API + Markup

JavaScript is a trend, we all know. But we must not forget that it is possible to use functional language to implement practically the same functions that JavaScript performs for headlessCMS and SSG's. So the name given to architecture is not wrong? I'm a scientist and I'm dedicating my monograph to explaining how this new platform works.

Odd "best practise"

"With a JAMstack project, anyone should be able to do a git clone , install any needed dependencies with a standard procedure (like npm install), and be ready to run the full project locally. No databases to clone, no complex installs. This reduces contributor friction, and also simplifies staging and testing workflows."

What?

Well you'd have to install whatever runs the API, including any DB? This doesn't sound like a consequence of the "JAM stack", but as a side effect of connecting your local environment to an external API, hence not having the whole project.

Code of Conduct for events

Hi folks! I'm one of the organizers of the Seattle JAMstack event and I've been looking for a decent code of conducts for our events. I thought it'd be great to host it on this site so that other events could easily link to it.

I opened #186 for this purpose. Feedback is welcome! Cc @PerrySetGo @biilmann

Optimize image loads, data capped plans

Use existing asset pipeline and tools like ImageOptim to optimize user-provided images for the Web. See #72 for example of performance with a very large PNG using pngquant.

As number of examples increases, apply lazyloading with something like lazysizes to limit bandwidth consumption for data capped users. Example implementation: gohugoio/hugoThemesSite#32

For SVGs the network is usually the bottleneck. WRT raster images law of diminishing returns apply.

Orthogonal: Git is not good at storing large blobs. Git LFS helps mitigate the large blob problem and BFG Repo Cleaner can help remove large blobs from history in a performant way.

JAMStack Lisbon meetup graphics

Olá! Another day, another meetup. This time it's Lisbon!

Edit: here is the meetup link: https://www.meetup.com/JAMstack-Lisbon/

We need the standard assets for Lisbon - here are the landmarks Nuno has suggested for the graphics. He says:

In terms of landmarks check the Torre de belem,
https://en.wikipedia.org/wiki/Belém_Tower

the bridge
https://en.wikipedia.org/wiki/25_de_Abril_Bridge

and the main square
https://en.wikipedia.org/wiki/Praça_do_Comércio#/media/File:Lisbon_main_square_(36622604910).jpg

He is organizing a meetup in january so we have a little bit of time for this.

Muito obrigado!

Review

Just another stupid "stack" created by kids who they know better than people who have been around since the start of the internet!

automatically get thumbnails of the example websites

what do you think about this?

now contributors can add their show cases with ease without manually capturing & cropping their screen-shots.

you can automatically get thumbnails of the example websites, always up-to-date (by our specific period) screenshots, without stale

e.g.

https://api.letsvalidate.com/v1/thumbs?url=http://www.sphero.com/&width=596&height=396
Result: Thumbnail Preview
<img src="https://api.letsvalidate.com/v1/thumbs?url={{ .link }}&width=596&height=396"/>

you can learn more about the api at the github repo

Slack link on Jamstack.org is expired

When clicking the link on the footer at jamstack.org to join the slack, the link is expired.

image

Expected behavior: the link should be active so folks who want to join the slack can sign up.

API security

Hi,

I have a question about working with an oAuth powered API that requires the following info provided by the client in order to get an access token and be able to make any API requests:

  • For "public endpoints":
    • Client ID
    • Client Secret
  • For private (user-specific) endpoints:
    • Username
    • Password

This is a pretty standard way to control the API access, Client ID and Secret are always required to get a token (even if a user is not authenticated).

So in the case of JAMStack, you would have to distribute Client ID and Secret together with your JS code. Do you find this problematic? Is there's any "best practice" to deal with this?

Thanks!

Adding feature keywords or feature matrix

Given then strength, weaknesses and focuses of the different CMSs, it would be useful to know what features are supported by each site-generator and headless CMS.

As an example, to have an indicator as to whether multi-lingual support is provided by each and in what form.

Thinking this would be via keywords added to the front-matter. The keywords could be free-form or limited to a set of recognised keywords, such that if an unsupported keyword is provided, then it would not be displayed on the page.

Going further, the keywords could be broken down into "strongly supported" and "supported", to have an indication as to how well that functionality is provided for.

Would this be of interest and in what form does the team think it should take?

Okay, "what is the Jamstack?" and "why the Jamstack?", but *who* is the Jamstack?

Hello:

I hope this message finds you well.

I am unable to find on the pages at jamstack.org any information about the organization.

  1. Who founded Jamstack and in which country and year?
  2. Beyond advancing adoption of this new development paradigm ("The Jamstack"), what is the organization's mission?
  3. Where does the organization receive its funding?

Pardon me if this this issue tracker is not the correct place to ask a FAQ-style question; I did not see any other means of contact.

—James

Discussion: jamstack word treatment

Discussion: jamstack word treatment

Note to the reader:

This issue discusses how we write "JAMSTACK". I'm going to have to write the word itself a number of times in the issue as a result... which is bound to result in LOLs. So I'll normalise on jamstack for a while. This is not a statement of intent!

Goals of this issue

  • Gather thoughts from the community about the best way to present the word jamstack when written
  • Minimize confusion, maximize clarity
  • Seek consensus on the best way to avoid confusion when communicating what jamstack is
  • It would be useful to be able to be consistent ourselves, and offer a place to find the "generally accepted" word written as a reference.

Current challenges and observations

  • Naming things is hard!
  • The word was derived from JavaScript, APIs and Markup, but you don't have to use all 3 when adopting this architectureal model. So right away, by writing "JAMstack", we introduce confusion when explaining what this is.
  • Most people using the term regularly tends to be using the form "JAMstack"
  • The wider community currently use various ways of presenting the word, and we would like to be consistent
  • I (Phil 👋) quietly experimented with a revised treatment on jamstack.org without discussing it or announcing it first. This created more confusion and discussion than I anticipated! My bad. Apologies!
  • Chris Coyier observered and commented on our flux nicely: https://css-tricks.com/jamstack-vs-jamstack/
  • If we feel it appropriate to follow the lead of things like "LAMP", then we might note that this is generally referred to as "LAMP stack"
  • If we would take inspiration from things like "AJAX", then we might note that this is generally referred to as "Ajax" (see below)
  • Naming things is hard!

Proposal and justification

My opinion is that we should adopt "Jamstack" as our norm.

  • It avoids the common first question of "what does that stand for?", more often instead prompting, "what is that?"
  • It's easier to avoid well-intentioned consistencies than are common with "JAMstack" (JAM Stack, JAM stack, JAMStack)
  • and as I mentioned on the jamstack slack:

I'd just offer this one comparison: Ajax.

When I first started using Ajax, it was always called "AJAX" and stood for Async JavaScript And XML. Over time, JSON became more popular than XML with this pattern, but we still called it the same thing. And these days we'd refer to it as "Ajax" (if at all, lol) because what it stands for is more than what the acronym consists of.

Over the last 5 years since the term was coined, the ecosystem which enables the jamstack has evolved and matured so much. The term needs to not divert attention away from that fact, and towards the original acronym. — I believe that jamstack stands for so much more than using JavaScript, APIs and Markup. I think it stands more for:

  • Pre-rendering as much as possible
  • Serving a site with static assets, without the need for a webserver executing logic to create responses on demand
  • Enhancing with JavaScript and leveraging browser APIs where appropriate
  • Feasting on the flourishing API economy, and decoupling our own services into APIs which our UIs can consume.

...but I'm keen on wider perspectives about the word.

For discussion

So... how should we normalise how we write this word?

JAMstack 2018 Promotional Banner

Jamstack.org has a banner advertising JAMstack_conf, which took place earlier this week (I was lucky enough to attend, and had a great time!):

Learn more about the JAMstack at JAMstack Conf, San Francisco — 29-30 October, 2018

learn more about the jamstack at jamstack conf san francisco 29-30 october 2018

This should probably be removed or updated.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.