34 | )
35 | }
36 |
37 | const navbarQuery = graphql`
38 | query {
39 | brandImage: file(relativePath: { eq: "awesome-stacks-logo.svg" }) {
40 | childImageSharp {
41 | fixed(height: 32) {
42 | ...GatsbyImageSharpFixed_noBase64
43 | }
44 | }
45 | }
46 | site {
47 | siteMetadata {
48 | title
49 | repository
50 | }
51 | }
52 | }`;
53 |
54 | export default Navbar;
--------------------------------------------------------------------------------
/content/about.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: About
3 | ---
4 |
5 | # Awesome Stacks
6 |
7 | [](https://awesome.re)
8 |
9 | [](https://app.netlify.com/sites/awesomestacks/deploys)
10 |
11 | Awesome Stacks is a community-curated list of tech stacks for building different applications and features. It is open source and inspired by the original [awesome list](http://awesome.re/).
12 |
13 | Each stack in the list has a name, description, and list of a few of the key tools and technologies. Optionally, it links to a tutorial, starter kit or boilerplate that makes it easy to get started with.
14 |
15 | Got a stack you think is the best way to do something? Please edit this file and add it! Check out CONTRIBUTING.md for more information.
16 |
17 | ## Where can I see the stacks?
18 |
19 | Stacks can be browsed in two places—on the README and on [awesomestacks.dev](https://awesomestacks.dev/). The site, built with Gatsby and React, displays logos and metrics about each tool listed in the README by pulling data from the GitHub and StackShare APIs.
20 |
21 | ## Who writes the stacks?
22 |
23 | You do! Just like awesome lists, anyone is welcome and encouraged to contribute their knowledge. See the [Contribution Guide](/contribute) for how to get started.
24 |
25 | ## Who’s behind all this?
26 |
27 | Awesome Stacks is built and maintained by [StackShare](https://stackshare.io/) with the help of [DeveloperMode](https://developermode.com/). StackShare’s mission is to help developers discover new tools and make better technology decisions, and generally to make building software more awesome ✌️
28 |
29 |
56 |
57 | )
58 | }
59 |
60 | export default GitHubCard
61 |
--------------------------------------------------------------------------------
/src/components/seo.js:
--------------------------------------------------------------------------------
1 | import React from "react"
2 | import PropTypes from "prop-types"
3 | import Helmet from "react-helmet"
4 | import { useStaticQuery, graphql } from "gatsby"
5 |
6 | function SEO({ description, lang, meta, keywords, title, titleTemplate, image }) {
7 | const { site } = useStaticQuery(
8 | graphql`
9 | query {
10 | site {
11 | siteMetadata {
12 | title
13 | description
14 | author
15 | url
16 | image
17 | imageWidth
18 | imageHeight
19 | }
20 | }
21 | }
22 | `
23 | )
24 |
25 | const metaDescription = description || site.siteMetadata.description
26 |
27 | return (
28 | 0
90 | ? {
91 | name: `keywords`,
92 | content: keywords.join(`, `),
93 | }
94 | : []
95 | )
96 | .concat(meta)}
97 | />
98 | )
99 | }
100 |
101 | SEO.defaultProps = {
102 | lang: `en`,
103 | meta: [],
104 | keywords: [],
105 | }
106 |
107 | SEO.propTypes = {
108 | description: PropTypes.string,
109 | lang: PropTypes.string,
110 | meta: PropTypes.array,
111 | keywords: PropTypes.arrayOf(PropTypes.string),
112 | title: PropTypes.string.isRequired,
113 | }
114 |
115 | export default SEO
116 |
--------------------------------------------------------------------------------
/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | # Contributor Covenant Code of Conduct
2 |
3 | ## Our Pledge
4 |
5 | In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
6 |
7 | ## Our Standards
8 |
9 | Examples of behavior that contributes to creating a positive environment include:
10 |
11 | * Using welcoming and inclusive language
12 | * Being respectful of differing viewpoints and experiences
13 | * Gracefully accepting constructive criticism
14 | * Focusing on what is best for the community
15 | * Showing empathy towards other community members
16 |
17 | Examples of unacceptable behavior by participants include:
18 |
19 | * The use of sexualized language or imagery and unwelcome sexual attention or advances
20 | * Trolling, insulting/derogatory comments, and personal or political attacks
21 | * Public or private harassment
22 | * Publishing others' private information, such as a physical or electronic address, without explicit permission
23 | * Other conduct which could reasonably be considered inappropriate in a professional setting
24 |
25 | ## Our Responsibilities
26 |
27 | Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
28 |
29 | Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
30 |
31 | ## Scope
32 |
33 | This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
34 |
35 | ## Enforcement
36 |
37 | Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at team@stackshare.io. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
38 |
39 | Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
40 |
41 | ## Attribution
42 |
43 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
44 |
45 | [homepage]: http://contributor-covenant.org
46 | [version]: http://contributor-covenant.org/version/1/4/
--------------------------------------------------------------------------------
/src/components/stacks/stackshare-card.js:
--------------------------------------------------------------------------------
1 | import React from "react"
2 | import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
3 | import Card from "./card"
4 | import { truncate, shortenLargeNumber } from "../../utils"
5 |
6 | function StackShare({ name, description, stackshare }) {
7 | if (!stackshare) {
8 | return {name} not found
9 | }
10 | const stacksMetric = getMetric(`stacks`, stackshare.stackshareStats);
11 | const starsMetric = getMetric(`stars`, stackshare.githubStats || []);
12 | const forksMetric = getMetric(`forks`, stackshare.githubStats || []);
13 | return (
14 |
15 |
76 |
77 | );
78 | }
79 |
80 | export const pageQuery = graphql`
81 | query($id: String!) {
82 | site {
83 | siteMetadata {
84 | repository
85 | }
86 | }
87 | markdownRemark(id: { eq: $id }) {
88 | fields {
89 | stacks {
90 | name
91 | description
92 | path
93 | index
94 | resources {
95 | text
96 | href
97 | }
98 | tools {
99 | name
100 | description
101 | gitHubData {
102 | name
103 | nameWithOwner
104 | description
105 | descriptionHTML
106 | stargazers {
107 | totalCount
108 | }
109 | repositoryTopics {
110 | edges {
111 | node {
112 | topic {
113 | name
114 | }
115 | url
116 | }
117 | }
118 | }
119 | forks {
120 | totalCount
121 | }
122 | updatedAt
123 | url
124 | homepageUrl
125 | languages {
126 | edges {
127 | node {
128 | name
129 | color
130 | }
131 | }
132 | }
133 | }
134 | stackShareData {
135 | name
136 | description
137 | imageUrl
138 | websiteUrl
139 | profileUrl
140 | githubUrl
141 | group {
142 | name
143 | url
144 | }
145 | category {
146 | name
147 | url
148 | }
149 | stackshareStats {
150 | name
151 | value
152 | }
153 | githubStats {
154 | name
155 | value
156 | }
157 | }
158 | }
159 | }
160 | }
161 | }
162 | }
163 | `;
164 | export default ReadmeStacksPage
--------------------------------------------------------------------------------
/plugins/gatsby-transform-stacks/gatsby-node.js:
--------------------------------------------------------------------------------
1 | const path = require("path");
2 | const cheerio = require("cheerio");
3 | const slugify = require('@sindresorhus/slugify');
4 | const remark = require('remark');
5 | const html = require('remark-html');
6 |
7 | const stackshare = require("../../src/utils/stackshare");
8 | const github = require("../../src/utils/github");
9 |
10 | const customReplacements = [
11 | [".", ""]
12 | ]
13 |
14 | exports.onCreateNode = async ({ node,
15 | actions,
16 | getNode,
17 | loadNodeContent }) => {
18 |
19 | const { createNodeField } = actions
20 |
21 | if (node.internal.type !== `MarkdownRemark`) {
22 | return
23 | }
24 |
25 | const parent = getNode(node.parent);
26 | if (parent.internal.type === "File") {
27 | createNodeField({
28 | name: `sourceName`,
29 | node,
30 | value: parent.sourceInstanceName
31 | });
32 | }
33 |
34 | if (parent.sourceInstanceName !== `readme-stacks`) {
35 | return
36 | }
37 |
38 | // add a field for the list of tools used in the mdx
39 | const nodeContent = await loadNodeContent(node);
40 | const nodeContentHtml = await remark().use(html).process(nodeContent);
41 |
42 | const $ = cheerio.load(nodeContentHtml.contents);
43 |
44 | const h3s = $(`h3`);
45 |
46 | var toolCount = 0;
47 | var stackCount = $(`h3`.length);
48 |
49 | console.log(`Processing ${stackCount} stacks in the README`)
50 |
51 | const stacks = h3s.map((index, h3) => {
52 | stackCount++;
53 | const name = $(h3).text().replace(/↗/, '').trim();
54 | const path = slugify(name, { customReplacements });
55 | return {
56 | name, path, index,
57 | url: $(h3).find("a").attr("href"),
58 | description: $(h3).next("p").text(),
59 | tools: $(h3).nextUntil(`h3, h5`, `ul`).find(`li`).map((_, li) => {
60 | toolCount++;
61 | const toolObj = {};
62 | $(li).find("a").each((_, link) => {
63 | if ($(link).attr("href").match(/https:\/\/stackshare.io\//)) {
64 | toolObj.stackShareUrl = $(link).attr("href");
65 | } else if ($(link).attr("href").match(/https:\/\/github.com\//)) {
66 | toolObj.gitHubUrl = $(link).attr("href");
67 | } else if ($(link).text().match(/[\w\d_ -]/)) {
68 | toolObj.name = $(link).text();
69 | toolObj.url = $(link).attr("href");
70 | }
71 | });
72 | toolObj.description = $(li).clone().children().remove().end().contents().text();
73 | return toolObj;
74 | }).get(),
75 | resources: $(h3).nextUntil(`h3`, `h5`).nextUntil(`h3`, `ul`).find(`li > a`).map((_, a) => {
76 | return {
77 | text: $(a).text(),
78 | href: $(a).attr(`href`)
79 | }
80 | }).get()
81 | }
82 | }).get()
83 |
84 | console.log(`Fetching data for ${toolCount} tools in ${stackCount} stacks`);
85 |
86 | // get the stacks then get the tools
87 |
88 | await Promise.all(stacks.map(stack => {
89 |
90 | return Promise.all(stack.tools.map(async tool => {
91 | if (tool.gitHubUrl) {
92 | const [owner, name] = tool.gitHubUrl.replace(/http[s]+:\/\/github\.com\//, '').split(`/`);
93 | try {
94 | console.log(`Fetching GitHub: ${tool.gitHubUrl}`)
95 | tool.gitHubData = await github.getGitHubTool({ owner, name })
96 | } catch (e) {
97 | console.warn(e);
98 | }
99 | }
100 | if (tool.stackShareUrl) {
101 | const url = tool.stackShareUrl
102 | const name = url.replace(/http[s]+:\/\/stackshare\.io\//, '')
103 | try {
104 | console.log(`Fetching StackShare: ${tool.stackShareUrl}`);
105 | tool.stackShareData = await stackshare.getStackShareTool({ name });
106 | } catch (e) {
107 | console.warn(e);
108 | }
109 | }
110 | }));
111 |
112 | }));
113 |
114 | console.log(`\n*** Fetching complete — updating node fields ***\n`);
115 |
116 | createNodeField({
117 | name: "stacks",
118 | node,
119 | value: stacks
120 | });
121 |
122 | };
123 |
124 | exports.createPages = ({ graphql, actions }) => {
125 | const { createPage } = actions;
126 | return new Promise((resolve, reject) => {
127 | resolve(
128 | graphql(
129 | `
130 | {
131 | allMarkdownRemark(filter: { fields: { sourceName: { eq: "readme-stacks" } } }) {
132 | edges {
133 | node {
134 | id
135 | fields {
136 | stacks {
137 | name
138 | path
139 | }
140 | }
141 | }
142 | }
143 | }
144 | }
145 | `
146 | ).then(result => {
147 | if (result.errors) {
148 | console.error(result.errors);
149 | reject(result.errors);
150 | return
151 | }
152 | // there will just be one edge for the readme
153 | var pageCount = 0;
154 | result.data.allMarkdownRemark.edges.forEach(({ node }) => {
155 | node.fields.stacks.forEach((stack, index) => {
156 | createPage({
157 | path: stack.path,
158 | component: path.resolve(`./src/components/pages/readme-stacks-page.js`),
159 | context: { id: node.id, stackName: stack.name }
160 | });
161 | pageCount++;
162 | });
163 | });
164 | console.log(`Built ${pageCount} pages from the gatsby-transform-stacks plugin`);
165 | })
166 | );
167 | });
168 | };
--------------------------------------------------------------------------------
/content/stacks/algolia-site-search-full.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | description: The Algolia way to build a site search for any website using a crawler.
3 | title: Algolia site search
4 | createdAt: 2019-03-09
5 | updatedAt: 2019-03-18
6 | contributors:
7 | - dzello
8 | ---
9 |
10 | # Introduction
11 |
12 | Need a site search? If you have content that you want users to find, the answer is yes! Thankfully it's not hard to add a basic site search using Algolia, even if your content doesn't live in a well-organized CMS or database. This awesome stack is a collection of all of the various tools you'll need to crawl and scrape your site's content, upload it to Algolia, then add a search box to your UI.
13 |
14 | # Search Engine
15 |
16 |
17 |
18 | Algolia's Community plan is free up to 10,000 records with unlimited search queries.
19 |
20 |
21 | Crawls the sitemap and uses CSS selectors to extract elements from the page, then pushes the data to a configured Algolia index. Written in Node.js.
22 |
23 |
24 |
25 | ## Resources
26 |
27 | - [Algolia Docs - How Algolia Works](https://www.algolia.com/doc/guides/getting-started/how-algolia-works/)
28 | - [Algolia Docs - Prepare Your Data - Format and Structure](https://www.algolia.com/doc/guides/sending-and-managing-data/prepare-your-data/)
29 |
30 | # Crawling
31 |
32 |
33 |
34 | Crawls the sitemap and uses CSS selectors to extract elements from the page, then pushes the data to a configured Algolia index. Written in Node.js.
35 |
36 |
37 | An open source project from Algolia that crawls a website and uploads it to an index. Used mostly for documentation but can be adapted to general websites.
38 |
39 |
40 | A popular crawling and scraping tool for Python. This will help you get the data off your site, then you'll use an Algolia SDK to upload it.
41 |
42 |
43 | Like scrapy but for Node.js. Syntax is composable - takes a bit to get used to but if very powerful.
44 |
45 |
46 |
47 | ## Resources
48 |
49 | - [The Ultimate Guide to Web Scraping with Node.js](https://medium.freecodecamp.org/the-ultimate-guide-to-web-scraping-with-node-js-daa2027dcd3)
50 | - [How To Crawl A Web Page with Scrapy and Python 3](https://www.digitalocean.com/community/tutorials/how-to-crawl-a-web-page-with-scrapy-and-python-3)
51 | - [Algolia Docs - Indexing Long Documents](https://www.algolia.com/doc/guides/sending-and-managing-data/prepare-your-data/how-to/indexing-long-documents/)
52 | - [chunk-text - chunk/split a string by length without cutting/truncating words](https://github.com/algolia/chunk-text)
53 |
54 | # Static site integrations
55 |
56 | If you're using a common static site generator to build your site, there’s a good chance Algolia or the community has created a pre-built integration you can use.
57 |
58 |
59 |
60 | An official Algolia-supported way to create a search for websites based on jekyll.
61 |
62 |
63 | A Gatsby plugin that lets you query for GraphQL site content and convert it into Algolia records.
64 |
65 |
66 | For the Hugo users, an alternative to the DocSearch plugin that allows more customization.
67 |
68 |
69 |
70 | ## Resources
71 |
72 | - [Static site search with Algolia and Hugo](https://forestry.io/blog/search-with-algolia-in-hugo/)
73 | - [Jekyll search with Algolia and webtasks](https://forestry.io/blog/search-with-algolia-in-jekyll/)
74 | - [Custom search with Algolia in Gatsby](https://janosh.io/blog/gatsby-algolia-search)
75 | - [Gatsby Docs - Adding Search](https://www.gatsbyjs.org/docs/adding-search/)
76 |
77 | # User interface
78 |
79 |
80 |
81 | This is the "vanilla JS" version of InstantSearch, meaning that it doesn't need any JavaScript framework to work.
82 |
83 |
84 | If you're already using React, maybe through Gatsby, this library will feel very comfortable.
85 |
86 |
87 | The Vue.js version of InstantSearch.
88 |
89 |
90 | The Angular version of InstantSearch, compatible with Angular 5 and above.
91 |
92 |
93 | Use for a standard drop-down interface, good if you’re putting a search bar in the site header
94 |
95 |
96 |
97 | ## Resources
98 |
99 | - [Algolia Docs - What is InstantSearch.js](https://www.algolia.com/doc/guides/building-search-ui/what-is-instantsearch/js/)
100 | - [Video - Build an instant search result page](https://www.youtube.com/watch?v=lN0-mnwyfrE)
101 | - [Search interface - 20 things to consider](https://uxplanet.org/search-interface-20-things-to-consider-4b1466e98881)
102 |
103 | # Utilities
104 |
105 |
106 |
107 | A swiss army knife for manipulating JSON on the command line. Useful to transform records before uploading to Algolia.
108 |
109 |
110 | Generate the code for a search box that matches your site’s design and colors.
111 |
112 |
113 |
--------------------------------------------------------------------------------
/src/images/awesome-stacks-logo.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | CC0 1.0 Universal
2 |
3 | Statement of Purpose
4 |
5 | The laws of most jurisdictions throughout the world automatically confer
6 | exclusive Copyright and Related Rights (defined below) upon the creator and
7 | subsequent owner(s) (each and all, an "owner") of an original work of
8 | authorship and/or a database (each, a "Work").
9 |
10 | Certain owners wish to permanently relinquish those rights to a Work for the
11 | purpose of contributing to a commons of creative, cultural and scientific
12 | works ("Commons") that the public can reliably and without fear of later
13 | claims of infringement build upon, modify, incorporate in other works, reuse
14 | and redistribute as freely as possible in any form whatsoever and for any
15 | purposes, including without limitation commercial purposes. These owners may
16 | contribute to the Commons to promote the ideal of a free culture and the
17 | further production of creative, cultural and scientific works, or to gain
18 | reputation or greater distribution for their Work in part through the use and
19 | efforts of others.
20 |
21 | For these and/or other purposes and motivations, and without any expectation
22 | of additional consideration or compensation, the person associating CC0 with a
23 | Work (the "Affirmer"), to the extent that he or she is an owner of Copyright
24 | and Related Rights in the Work, voluntarily elects to apply CC0 to the Work
25 | and publicly distribute the Work under its terms, with knowledge of his or her
26 | Copyright and Related Rights in the Work and the meaning and intended legal
27 | effect of CC0 on those rights.
28 |
29 | 1. Copyright and Related Rights. A Work made available under CC0 may be
30 | protected by copyright and related or neighboring rights ("Copyright and
31 | Related Rights"). Copyright and Related Rights include, but are not limited
32 | to, the following:
33 |
34 | i. the right to reproduce, adapt, distribute, perform, display, communicate,
35 | and translate a Work;
36 |
37 | ii. moral rights retained by the original author(s) and/or performer(s);
38 |
39 | iii. publicity and privacy rights pertaining to a person's image or likeness
40 | depicted in a Work;
41 |
42 | iv. rights protecting against unfair competition in regards to a Work,
43 | subject to the limitations in paragraph 4(a), below;
44 |
45 | v. rights protecting the extraction, dissemination, use and reuse of data in
46 | a Work;
47 |
48 | vi. database rights (such as those arising under Directive 96/9/EC of the
49 | European Parliament and of the Council of 11 March 1996 on the legal
50 | protection of databases, and under any national implementation thereof,
51 | including any amended or successor version of such directive); and
52 |
53 | vii. other similar, equivalent or corresponding rights throughout the world
54 | based on applicable law or treaty, and any national implementations thereof.
55 |
56 | 2. Waiver. To the greatest extent permitted by, but not in contravention of,
57 | applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and
58 | unconditionally waives, abandons, and surrenders all of Affirmer's Copyright
59 | and Related Rights and associated claims and causes of action, whether now
60 | known or unknown (including existing as well as future claims and causes of
61 | action), in the Work (i) in all territories worldwide, (ii) for the maximum
62 | duration provided by applicable law or treaty (including future time
63 | extensions), (iii) in any current or future medium and for any number of
64 | copies, and (iv) for any purpose whatsoever, including without limitation
65 | commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes
66 | the Waiver for the benefit of each member of the public at large and to the
67 | detriment of Affirmer's heirs and successors, fully intending that such Waiver
68 | shall not be subject to revocation, rescission, cancellation, termination, or
69 | any other legal or equitable action to disrupt the quiet enjoyment of the Work
70 | by the public as contemplated by Affirmer's express Statement of Purpose.
71 |
72 | 3. Public License Fallback. Should any part of the Waiver for any reason be
73 | judged legally invalid or ineffective under applicable law, then the Waiver
74 | shall be preserved to the maximum extent permitted taking into account
75 | Affirmer's express Statement of Purpose. In addition, to the extent the Waiver
76 | is so judged Affirmer hereby grants to each affected person a royalty-free,
77 | non transferable, non sublicensable, non exclusive, irrevocable and
78 | unconditional license to exercise Affirmer's Copyright and Related Rights in
79 | the Work (i) in all territories worldwide, (ii) for the maximum duration
80 | provided by applicable law or treaty (including future time extensions), (iii)
81 | in any current or future medium and for any number of copies, and (iv) for any
82 | purpose whatsoever, including without limitation commercial, advertising or
83 | promotional purposes (the "License"). The License shall be deemed effective as
84 | of the date CC0 was applied by Affirmer to the Work. Should any part of the
85 | License for any reason be judged legally invalid or ineffective under
86 | applicable law, such partial invalidity or ineffectiveness shall not
87 | invalidate the remainder of the License, and in such case Affirmer hereby
88 | affirms that he or she will not (i) exercise any of his or her remaining
89 | Copyright and Related Rights in the Work or (ii) assert any associated claims
90 | and causes of action with respect to the Work, in either case contrary to
91 | Affirmer's express Statement of Purpose.
92 |
93 | 4. Limitations and Disclaimers.
94 |
95 | a. No trademark or patent rights held by Affirmer are waived, abandoned,
96 | surrendered, licensed or otherwise affected by this document.
97 |
98 | b. Affirmer offers the Work as-is and makes no representations or warranties
99 | of any kind concerning the Work, express, implied, statutory or otherwise,
100 | including without limitation warranties of title, merchantability, fitness
101 | for a particular purpose, non infringement, or the absence of latent or
102 | other defects, accuracy, or the present or absence of errors, whether or not
103 | discoverable, all to the greatest extent permissible under applicable law.
104 |
105 | c. Affirmer disclaims responsibility for clearing rights of other persons
106 | that may apply to the Work or any use thereof, including without limitation
107 | any person's Copyright and Related Rights in the Work. Further, Affirmer
108 | disclaims responsibility for obtaining any necessary consents, permissions
109 | or other rights required for any use of the Work.
110 |
111 | d. Affirmer understands and acknowledges that Creative Commons is not a
112 | party to this document and has no duty or obligation with respect to this
113 | CC0 or use of the Work.
114 |
115 | For more information, please see
116 |
--------------------------------------------------------------------------------
/src/pages/index.js:
--------------------------------------------------------------------------------
1 | import React from "react"
2 | import { graphql } from 'gatsby'
3 | import Layout from "../components/layout"
4 | import SEO from "../components/seo"
5 | import StackCard from "../components/stacks/stack-card"
6 | import Banner from "../components/banner"
7 | import logomarkImage from "../images/awesome-stacks-logo-sunglasses.svg"
8 | import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
9 |
10 | const IndexPage = ({
11 | data: {
12 | site: { siteMetadata: { title, description, contributing, repository } },
13 | allGithubContributors,
14 | allMarkdownRemark
15 | },
16 | }) => {
17 | const Stacks = allMarkdownRemark.edges[0].node.fields.stacks.map(stack =>
18 |
6 |
7 | # Awesome Stacks
8 | [](https://stackshare.io/stackshare/awesome-stacks)
9 |
10 | > Tech stacks for building different applications and features.
11 |
12 | ## Contents
13 |
14 | - [Front-end](#front-end)
15 | - [Full stack](#full-stack)
16 | - [Back-end](#back-end)
17 | - [Mobile](#mobile)
18 |
19 | Awesome Stacks is a community-curated list of tech stacks for building different applications and features. It is open source and inspired by the original [awesome list](http://awesome.re/).
20 |
21 | Each stack in the list has a name, description, and list of a few of the key tools and technologies. Optionally, it links to a tutorial, starter kit or boilerplate that makes it easy to get started with.
22 |
23 | Got a stack you think is a great way to build something? Please edit this file and add it! Check out [CONTRIBUTING.md](CONTRIBUTING.md) for more information.
24 |
25 | #### Browsing the stacks
26 |
27 | Stacks can be browsed in two places—on the README and on [awesomestacks.dev](https://awesomestacks.dev/). The site, built with Gatsby and React, displays logos and metrics about each tool listed in the README by pulling data from the GitHub and StackShare APIs.
28 |
29 | #### Legend
30 |
31 | 🛠 - StackShare tool profile
32 | 🐙 - GitHub repository
33 |
34 | ## Front-end
35 |
36 | ### React Next Boilerplate [↗](https://awesomestacks.dev/react-next-boilerplate)
37 |
38 | A basis for reducing the configuration of your projects with Next.js, best development practices and popular libraries in the developer community.
39 |
40 | - [Next.js](https://nextjs.org/) - [🛠](https://stackshare.io/next-js) - [🐙](https://github.com/zeit/next.js) - The React Framework for server rendering, static websites, PWAs.
41 | - [React Testing Library](https://testing-library.com/docs/react-testing-library/intro) - [🛠](https://stackshare.io/react-testing-library) - [🐙](https://github.com/testing-library/react-testing-library) - react-testing-library is a tool in the Testing Frameworks category of a tech stack.
42 | - [Emotion](https://emotion.sh/) - [🛠](https://stackshare.io/emotion) - [🐙](https://github.com/emotion-js/emotion) - CSS-in-JS library designed for high performance style composition.
43 | - [I18next](https://www.i18next.com/) - [🐙](https://github.com/i18next/i18next) - I18next is an internationalization-framework written in and for JavaScript. But it's much more than that.
44 | - [Redux Saga](https://redux-saga.js.org/) - [🐙](https://github.com/redux-saga/redux-saga) - is a library that aims to make application side effects (i.e. asynchronous things like data fetching and impure things like accessing the browser cache) easier to manage, more efficient to execute, easy to test, and better at handling failures.
45 |
46 | ##### Resources
47 |
48 | - [react-next-boilerplate](https://github.com/react-next-boilerplate/react-next-boilerplate)
49 |
50 | ### React starter kit [↗](https://awesomestacks.dev/react-starter-kit)
51 |
52 | React Starter Kit is an opinionated boilerplate for web development built on top of Node.js, Express, GraphQL and React, containing modern web development tools such as Webpack, Babel and Browsersync.
53 |
54 | - [React](https://reactjs.org/) - [🛠](https://stackshare.io/react) - [🐙](https://github.com/facebook/react) - React components can be used on the client and server side.
55 | - [Webpack](https://webpack.js.org/) - [🛠️](https://stackshare.io/webpack) - [🐙](https://github.com/webpack/webpack) - A static module bundler for modern JavaScript applications.
56 | - [GraphQL](https://graphql.org/) - [🛠](https://stackshare.io/graphql) - [🐙](https://github.com/graphql/graphql-js) - A query language for APIs and a runtime for fulfilling those queries with your existing data.
57 | - [Babel](https://babeljs.io/) - [🛠️](https://stackshare.io/babel) - [🐙](https://github.com/babel/babel) - A JavaScript compiler; use next generation JavaScript, today.
58 | - [Express](https://expressjs.com/) - [🛠️](https://stackshare.io/expressjs) - [🐙](https://github.com/expressjs/express) - A minimal and flexible Node.js web application framework.
59 | - [Node.js](https://nodejs.org/) - [🛠️](https://stackshare.io/nodejs) - [🐙](https://github.com/nodejs/node) - A JavaScript runtime built on Chrome's V8 JavaScript engine.
60 |
61 | ##### Resources
62 |
63 | - [react-starter-kit](https://github.com/kriasoft/react-starter-kit)
64 |
65 | ### React Firebase starter [↗](https://awesomestacks.dev/react-firebase-starter)
66 |
67 | React Starter Kit for Firebase is a popular project template (aka, boilerplate) for building modern, scalable web applications with React, Relay, and GraphQL using serverless infrastructure provided by Google Cloud (Cloud SQL, Cloud Functions, CDN hosting, and file storage).
68 |
69 | - [Firebase](https://firebase.google.com/) - [🛠️](https://stackshare.io/firebase) - A cloud-hosted NoSQL database that lets you store and sync data between your users in real-time.
70 | - [Create React App](https://facebook.github.io/create-react-app/) - [🛠](https://stackshare.io/create-react-app) - [🐙](https://github.com/facebook/create-react-app) - Set up a modern web app by running one command.
71 | - [Material UI](https://material-ui.com/) - [🛠️](https://stackshare.io/material-ui) - [🐙](https://github.com/mui-org/material-ui) - React components that implement Google's Material Design.
72 | - [Relay](https://facebook.github.io/relay/) - [🛠️](https://stackshare.io/relay) - [🐙](https://github.com/facebook/relay) - A JavaScript framework for building data-driven React applications.
73 | - [GraphQL](https://graphql.org/) - [🛠](https://stackshare.io/graphql) - [🐙](https://github.com/graphql/graphql-js) - A query language for APIs and a runtime for fulfilling those queries with your existing data.
74 |
75 | ##### Resources
76 |
77 | - [react-firebase-starter](https://github.com/kriasoft/react-firebase-starter)
78 |
79 | ### vue-starter [↗](https://awesomestacks.dev/vue-starter)
80 |
81 | The most complete boilerplate for production-ready PWAs. With focus on performance, development speed, and best practices.
82 |
83 | - [Vue.js](https://vuejs.org/) - [🛠️](https://stackshare.io/vue-js) - [🐙](https://github.com/vuejs/vue) - An approachable core library that focuses on the view layer only.
84 | - [TypeScript](https://www.typescriptlang.org/) - [🛠️](https://stackshare.io/typescript) - [🐙](https://github.com/Microsoft/TypeScript) - A typed superset of JavaScript that compiles to plain JavaScript.
85 | - [Jest](https://jestjs.io/) - [🛠️](https://stackshare.io/jest) - [🐙](https://github.com/facebook/jest) - A comprehensive, delightful JavaScript testing solution.
86 | - [Prettier](https://prettier.io/) - [🛠️](https://stackshare.io/prettier) - [🐙](https://github.com/prettier/prettier) - An opinionated code formatter.
87 | - [Vuex](https://vuex.vuejs.org/) - [🐙](https://github.com/vuejs/vuex) - Centralized State Management for Vue.js.
88 | - [Vue Router](https://router.vuejs.org/) - [🐙](https://github.com/vuejs/vue-router) - Vue Router is the official router for Vue.js.
89 |
90 | ##### Resources
91 |
92 | - [vue-starter](https://vue-starter.herokuapp.com/docs/)
93 |
94 | ### Vue Enterprise Boilerplate [↗](https://awesomestacks.dev/vue-enterprise-boilerplate)
95 |
96 | An ever-evolving and opinionated architecture and dev environment for new Vue SPA projects using Vue CLI 3.
97 |
98 | - [Vue.js](https://vuejs.org/) - [🛠️](https://stackshare.io/vue-js) - [🐙](https://github.com/vuejs/vue) - An approachable core library that focuses on the view layer only.
99 | - [Vuex](https://vuex.vuejs.org/) - [🐙](https://github.com/vuejs/vuex) - Centralized State Management for Vue.js.
100 | - [Vue Router](https://router.vuejs.org/) - [🐙](https://github.com/vuejs/vue-router) - Vue Router is the official router for Vue.js.
101 | - [Vue CLI](https://cli.vuejs.org/) - [🐙](https://github.com/vuejs/vue-cli) - An approachable core library that focuses on the view layer only.
102 | - [Babel](https://babeljs.io/) - [🛠️](https://stackshare.io/babel) - [🐙](https://github.com/babel/babel) - compiler for writing next generation JavaScript; Babel will turn your ES6+ code into ES5 friendly code, so you can start using it right now without waiting for browser support.
103 | - [Sass](https://sass-lang.com) - [🛠️](https://stackshare.io/sass) - [🐙](https://github.com/sass/sass) - Sass is an extension of CSS3, adding nested rules, variables, mixins, selector inheritance, and more. It's translated to well-formatted, standard CSS using the command line tool or a web-framework plugin.
104 |
105 | ##### Resources
106 |
107 | - [vue-enterprise-boilerplate](https://github.com/chrisvfritz/vue-enterprise-boilerplate)
108 |
109 | ### Progressive Web App with Gatsby [↗](https://awesomestacks.dev/progressive-web-app-with-gatsby)
110 |
111 | Build a simple polling progressive web application with some great modern tech.
112 |
113 | - [Gatsby](https://gatsbyjs.org/) - [🛠](https://stackshare.io/gatsbyjs) - [🐙](https://github.com/gatsbyjs/gatsby) - Gatsby is a blazing fast modern site generator for React.
114 | - [Cloud Firestore](https://firebase.google.com/docs/firestore/) - [🛠️](https://stackshare.io/cloud-firestore) - A noSQL cloud database that exposes event listeners for real-time updates.
115 | - [Netlify](https://netlify.com/) - [🛠️](https://stackshare.io/netlify) - Netlify is a global CDN that makes continuous deployments as simple as a few clicks.
116 | - [styled components](https://www.styled-components.com/) - [🛠](https://stackshare.io/styled-components) - [🐙](https://github.com/styled-components/styled-components) - A react-specific css-in-js solution.
117 | - [Contentful](https://www.contentful.com/) - [🛠](https://stackshare.io/contentful) - [🐙](https://github.com/contentful) - Contentful is a flexible and future-friendly content platform that helps editors to manage and developers to serve content into mobile or web applications. Last but not least a powerhouse when worked with Gatsby.
118 |
119 | ##### Resources
120 |
121 | - [JAMstack PWA — Let’s Build a Polling App. with Gatsby.js, Firebase, and Styled-components](https://medium.com/@UnicornAgency/jamstack-pwa-lets-build-a-polling-app-with-gatsby-js-firebase-and-styled-components-pt-1-78a03a633092)
122 | - [Learn how to easily build a GatsbyJS website powered by Contentful](https://www.contentful.com/r/knowledgebase/gatsbyjs-and-contentful-in-five-minutes/)
123 |
124 |
125 | ### Victor Hugo boilerplate [↗](https://awesomestacks.dev/victor-hugo-boilerplate)
126 |
127 | A Hugo boilerplate for creating truly epic websites. This is a boilerplate for using Hugo as a static site generator and Webpack as your asset pipeline.
128 |
129 | - [Hugo](https://gohugo.io/) - [🛠](https://stackshare.io/hugo_2)- [🐙](https://github.com/gohugoio/hugo) - The world’s fastest framework for building websites.
130 | - [Webpack](https://webpack.js.org/) - [🛠️](https://stackshare.io/webpack) - [🐙](https://github.com/webpack/webpack) - A static module bundler for modern JavaScript applications.
131 | - [Babel](https://babeljs.io/) - [🛠️](https://stackshare.io/babel) - [🐙](https://github.com/babel/babel) - A JavaScript compiler; use next generation JavaScript, today.
132 | - [PostCSS](https://postcss.org/) - [🛠](https://stackshare.io/postcss) - [🐙](https://github.com/postcss/postcss) - A tool for transforming CSS with JavaScript.
133 |
134 | ##### Resources
135 |
136 | - [netlify-templates/victor-hugo](https://github.com/netlify-templates/victor-hugo)
137 |
138 |
139 | ### Nuxt, TypeScript + Docker [↗](https://awesomestacks.dev/nuxt-type-script-docker)
140 |
141 | Bleeding edge vue template focused on code quality and developer happiness.
142 |
143 | Offers a complete setup for both small and enterprise-scale apps.
144 |
145 | - [Nuxt](https://nuxtjs.org/) - [🛠](https://stackshare.io/nuxt) - [🐙](https://github.com/nuxt/nuxt.js) - Vue.js Meta Framework to create complex, fast & universal web applications quickly.
146 | - [TypeScript](https://www.typescriptlang.org/) - [🛠️](https://stackshare.io/typescript) - [🐙](https://github.com/Microsoft/TypeScript) - A typed superset of JavaScript that compiles to plain JavaScript.
147 | - [Sass](https://sass-lang.com) - [🛠️](https://stackshare.io/sass) - [🐙](https://github.com/sass/sass) - Sass is an extension of CSS3, adding nested rules, variables, mixins, selector inheritance, and more. It's translated to well-formatted, standard CSS using the command line tool or a web-framework plugin.
148 | - [Jest](https://jestjs.io/) - [🛠️](https://stackshare.io/jest) - [🐙](https://github.com/facebook/jest) - A comprehensive, delightful JavaScript testing solution.
149 | - [eslint](https://eslint.org/) - [🛠️](https://stackshare.io/eslint) - [🐙](https://github.com/eslint/eslint) - The pluggable linting utility for JavaScript and JSX.
150 | - [stylelint](https://stylelint.io/) - [🛠️](https://stackshare.io/stylelint) - [🐙](https://github.com/stylelint/stylelint) - A mighty, modern linter that helps you avoid errors and enforce conventions in your styles.
151 | - [Docker](https://www.docker.com/) - [🛠](https://stackshare.io/docker) - [🐙](https://github.com/docker/docker) A tool to create, deploy and run applications inside containers.
152 |
153 | ##### Resources
154 |
155 | - [wemake-vue-template](https://github.com/wemake-services/wemake-vue-template)
156 |
157 |
158 | ### Nextjs Blog Starter [↗](https://awesomestacks.dev/nextjs-blog-starter)
159 |
160 | A Nextjs Boilerplate code for creating a blog. The perfect solution to start a blog in React and use Tailwind CSS for styling.
161 |
162 | - [Next.js](https://nextjs.org/) - [🛠](https://stackshare.io/next-js) - [🐙](https://github.com/zeit/next.js) - The React Framework for server rendering, static websites, PWAs.
163 | - [React](https://reactjs.org/) - [🛠](https://stackshare.io/react) - [🐙](https://github.com/facebook/react) - React components can be used on the client and server side.
164 | - [TypeScript](https://www.typescriptlang.org/) - [🛠️](https://stackshare.io/typescript) - [🐙](https://github.com/Microsoft/TypeScript) - A typed superset of JavaScript that compiles to plain JavaScript.
165 | - [eslint](https://eslint.org/) - [🛠️](https://stackshare.io/eslint) - [🐙](https://github.com/eslint/eslint) - The pluggable linting utility for JavaScript and JSX.
166 | - [Babel](https://babeljs.io/) - [🛠️](https://stackshare.io/babel) - [🐙](https://github.com/babel/babel) - A JavaScript compiler; use next generation JavaScript, today.
167 | - [PostCSS](https://postcss.org/) - [🛠](https://stackshare.io/postcss) - [🐙](https://github.com/postcss/postcss) - A tool for transforming CSS with JavaScript.
168 | - [Netlify](https://netlify.com/) - [🛠️](https://stackshare.io/netlify) - Netlify is a global CDN that makes continuous deployments as simple as a few clicks.
169 |
170 | ##### Resources
171 |
172 | - [Nextjs Blog Starter](https://github.com/ixartz/Next-js-Blog-Boilerplate)
173 | - [Nextjs Blog Starter Demo](https://creativedesignsguru.com/demo/Nextjs-Blog-Boilerplate/)
174 |
175 |
176 | ## Full stack
177 |
178 | ### MERN: Mongo Express React Node [↗](https://awesomestacks.dev/mern-mongo-express-react-node)
179 |
180 | MERN stands for MongoDB, Express, React, Node. The four key technologies that make up the stack.
181 |
182 | - [React](https://reactjs.org/) - [🛠](https://stackshare.io/react) - [🐙](https://github.com/facebook/react) - React components can be used on the client and server side.
183 | - [MongoDB](https://www.mongodb.com/) - [🛠️](https://stackshare.io/mongodb) - [🐙](https://github.com/mongodb/mongo) - A document and JSON-oriented database.
184 | - [Express](https://expressjs.com/) - [🛠️](https://stackshare.io/expressjs) - [🐙](https://github.com/expressjs/express) - Fast, unopinionated, minimalist web framework for Node.js.
185 | - [Node.js](https://nodejs.org/en/) - [🛠️](https://stackshare.io/nodejs) - [🐙](https://github.com/nodejs/node) - Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine.
186 |
187 | ##### Resources
188 |
189 | - [Learn the MERN stack by building an exercise tracker — MERN Tutorial](https://medium.com/@beaucarnes/learn-the-mern-stack-by-building-an-exercise-tracker-mern-tutorial-59c13c1237a1)
190 |
191 | ### GraphCMS React + Apollo [↗](https://awesomestacks.dev/graph-cms-react-apollo)
192 |
193 | Lightning fast starter for bloggers, content creators, and really anyone who wants to break free from WordPress.
194 |
195 | - [GraphCMS](https://graphcms.com/) - [🛠️](https://stackshare.io/graphcms) - GraphCMS providing a backend to your app, giving you the tools to manage content.
196 | - [Create React App](https://facebook.github.io/create-react-app/) - [🛠](https://stackshare.io/create-react-app) - [🐙](https://github.com/facebook/create-react-app) - Set up a modern web app by running one command.
197 | - [Apollo](https://www.apollographql.com/) - [🛠️](https://stackshare.io/apollo) - [🐙](https://github.com/apollographql/apollo-client) - Apollo Client is the best way to use GraphQL to build client applications.
198 |
199 | ##### Resources
200 |
201 | - [GraphCMS starter blog with React & Apollo Client](https://github.com/GraphCMS/graphcms-examples/tree/master/with-reactjs)
202 |
203 | ### Strapi CMS with Gatsby [↗](https://awesomestacks.dev/strapi-cms-with-gatsby)
204 |
205 | Use Strapi CMS to maintain and manage your Gatsby static site. Deploy to Heroku.
206 |
207 | - [Strapi CMS](https://strapi.io) - [🐙](https://github.com/strapi/strapi) - Strapi is the Headless CMS developers love.
208 | - [Gatsby](https://gatsbyjs.org/) - [🛠](https://stackshare.io/gatsbyjs) - [🐙](https://github.com/gatsbyjs/gatsby) - Gatsby is a blazing fast modern site generator for React.
209 | - [Heroku](https://www.heroku.com/) - [🛠️](https://stackshare.io/heroku) - Heroku is a powerful platform for deploying your apps.
210 |
211 | ##### Resources
212 |
213 | - [Building a Static Blog using Gatsby and Strapi](https://blog.strapi.io/building-a-static-website-using-gatsby-and-strapi/)
214 | - [Learn Gatsby with Strapi Headless CMS Video Series](https://www.youtube.com/playlist?list=PL7Q0DQYATmvgGiz0MbbsMA_aB1V0yLE7a)
215 | - [Deploying Strapi to Heroku](https://strapi.io/documentation/3.x.x/guides/deployment.html#heroku)
216 |
217 | ### Algolia site search [↗](https://awesomestacks.dev/algolia-site-search)
218 |
219 | Add search to your JAMStack website, through a static site integration or by crawling the content.
220 |
221 | - [Algolia](https://algolia.com/) - [🛠](https://stackshare.io/algolia) - Hosted search API, free up to 10,000 records.
222 | - [DocSearch](https://community.algolia.com/docsearch) - [🐙](https://github.com/algolia/docsearch-scraper) - Crawls a website and uploads it to an index.
223 | - [gatsby-plugin-algolia](https://www.gatsbyjs.org/packages/gatsby-plugin-algolia/) - [🐙](https://github.com/algolia/gatsby-plugin-algolia) - Use GraphQL to specify Gatsby object to index with Algolia (beta).
224 | - [hugo-algolia](https://github.com/replicatedhq/hugo-algolia) - [🐙](https://github.com/replicatedhq/hugo-algolia) - Generate and send indices from Hugo static sites for use with Algolia.
225 | - [instantsearch.js](https://www.algolia.com/doc/guides/building-search-ui/what-is-instantsearch/js/) - [🐙](https://github.com/algolia/instantsearch.js) - JavaScript library for building performant and instant search experiences.
226 |
227 | ##### Resources
228 |
229 | - [Static site search with Hugo + Algolia](https://forestry.io/blog/search-with-algolia-in-hugo/)
230 |
231 | ### MEVN: Mongo Express Vue Node [↗](https://awesomestacks.dev/mevn-mongo-express-vue-node)
232 |
233 | This is a full stack web app boilerplate project with VueJS + ExpressJS + MongoDB.
234 |
235 | - [Vue.js](https://vuejs.org/) - [🛠️](https://stackshare.io/vue-js) - [🐙](https://github.com/vuejs/vue) - An approachable core library that focuses on the view layer only.
236 | - [MongoDB](https://www.mongodb.com/) - [🛠️](https://stackshare.io/mongodb) - [🐙](https://github.com/mongodb/mongo) - A document and JSON-oriented database.
237 | - [Express](https://expressjs.com/) - [🛠️](https://stackshare.io/expressjs) - [🐙](https://github.com/expressjs/express) - A minimal and flexible Node.js web application framework.
238 | - [Node.js](https://nodejs.org/en/) - [🛠️](https://stackshare.io/nodejs) - [🐙](https://github.com/nodejs/node) - Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine.
239 |
240 | ##### Resources
241 |
242 | - [Welcome to Vue-Express-Mongo BoilerPlate](http://vemapp.moleculer.services/)
243 |
244 | ### Rock Solid Modern Rails [↗](https://awesomestacks.dev/rock-solid-modern-rails)
245 |
246 | A Rails/JavaScript-based stack with modern/developer friendly technologies
247 |
248 | - [Rails](https://rubyonrails.org/) - [🛠](https://stackshare.io/rails) - [🐙](https://github.com/rails/rails) - An established web app framework with a focus on simplicity and productivity.
249 | - [React](https://reactjs.org/) - [🛠](https://stackshare.io/react) - [🐙](https://github.com/facebook/react) - React components can be used on the client and server side.
250 | - [GraphQL Ruby](https://graphql-ruby.org/) - [🛠](https://stackshare.io/graphql-ruby) - [🐙](https://github.com/rmosolgo/graphql-ruby) - Ruby server implementation of the GraphQL specification.
251 | - [Apollo Client](https://dev.apollodata.com/) - [🛠](https://stackshare.io/apollo) - [🐙](https://github.com/apollographql/apollo-client) - A powerfully extensible GraphQL JavaScript client.
252 | - [Heroku](https://heroku.com) - [🛠️](https://stackshare.io/heroku) Developer friendly web app infrastructure provider with seamless Ruby/Rails support.
253 | - [Cloud 66](https://www.cloud66.com/) - [🛠️](https://stackshare.io/cloud-66) Cloud 66 gives you everything you need to build, deploy, and manage your Rails applications on any cloud without the headache of the “server stuff”.
254 |
255 | ##### Resources
256 |
257 | - [A Rock Solid, Modern Web Stack—Rails 5 API + ActiveAdmin + Create React App on Heroku](https://blog.heroku.com/a-rock-solid-modern-web-stack)
258 |
259 | ### Serverless Stack with React on AWS [↗](https://awesomestacks.dev/serverless-stack-with-react-on-aws)
260 |
261 | Learn how to build a full-stack production ready note taking app using Serverless and React on AWS from serverless-stack.com. Step-by-step open-source tutorials with screenshots and code samples included.
262 |
263 | - [Serverless Framework](https://serverless.com/) - [🛠️](https://stackshare.io/serverless) - [🐙](https://github.com/serverless/serverless) - A toolkit for building serverless applications.
264 | - [AWS Lambda](https://aws.amazon.com/lambda) - [🛠️](https://stackshare.io/aws-lambda) - A compute service that runs your code in response to events.
265 | - [DynamoDB](http://aws.amazon.com/dynamodb/) - [🛠️](https://stackshare.io/amazon-dynamodb) - Fully managed NoSQL database service.
266 | - [Amazon Cognito](https://aws.amazon.com/cognito/) - [🛠️](https://stackshare.io/amazon-cognito) - Securely manage and synchronize app data for your users across their mobile devices.
267 | - [Amazon S3](https://aws.amazon.com/s3/) - [🛠️](https://stackshare.io/amazon-s3) - Store and retrieve any amount of data, at any time, from anywhere on the web.
268 | - [AWS Amplify](https://aws-amplify.github.io/) - [🛠️](https://stackshare.io/aws-amplify) - JavaScript Open Source Library with React, React Native Extensions.
269 | - [Amazon CloudFront](https://aws.amazon.com/cloudfront/) - [🛠️](https://stackshare.io/amazon-cloudfront) - Content delivery with low latency and high data transfer speeds.
270 | - [Create React App](https://facebook.github.io/create-react-app/) - [🛠](https://stackshare.io/create-react-app) - [🐙](https://github.com/facebook/create-react-app) - Set up a modern web app by running one command.
271 |
272 | ##### Resources
273 |
274 | - [serverless-stack.com](https://serverless-stack.com/)
275 |
276 | ### Electron React Boilerplate [↗](https://awesomestacks.dev/electron-react-boilerplate)
277 |
278 | A foundation for scalable cross-platform desktop apps all the way from development to distributing your app.
279 |
280 | - [Electron](http://electron.atom.io/) - [🛠️](https://stackshare.io/electron) - [🐙](https://github.com/electron/electron) - Build cross-platform desktop apps with JavaScript, HTML, and CSS.
281 | - [React](https://reactjs.org/) - [🛠](https://stackshare.io/react) - [🐙](https://github.com/facebook/react) - React components can be used on the client and server side.
282 | - [Redux](https://redux.js.org/) - [🛠](https://stackshare.io/reduxjs) - [🐙](https://github.com/reduxjs/redux) - Predictable state container for JavaScript apps.
283 | - [electron-builder](https://www.electron.build) - [🐙](https://github.com/electron-userland/electron-builder) - A complete solution to package and build a ready for distribution Electron app with “auto update” support out of the box.
284 |
285 | ##### Resources
286 |
287 | - [Electron React Boilerplate website](https://electron-react-boilerplate.js.org/)
288 |
289 | ### Vue with Electron [↗](https://awesomestacks.dev/vue-with-electron)
290 |
291 | A foundation for scalable cross-platform desktop apps all the way from development to distributing your app using Vue and Electron.
292 |
293 | - [Electron](http://electron.atom.io/) - [🛠️](https://stackshare.io/electron) - [🐙](https://github.com/electron/electron) - Build cross-platform desktop apps with JavaScript, HTML, and CSS.
294 | - [Vue.js](https://vuejs.org/) - [🛠️](https://stackshare.io/vue-js) - [🐙](https://github.com/vuejs/vue) - An approachable core library that focuses on the view layer only.
295 | - [Vuex](https://redux.js.org/) - [🛠](https://stackshare.io/reduxjs) - [🐙](https://github.com/reduxjs/redux) - Predictable state container for JavaScript apps.
296 | - [Vue Router](https://router.vuejs.org/) - [🐙](https://github.com/vuejs/vue-router) - Vue Router is the official router for Vue.js.
297 | - [Vue CLI](https://cli.vuejs.org/) - [🐙](https://github.com/vuejs/vue-cli) - An approachable core library that focuses on the view layer only.
298 | - [electron-builder](https://www.electron.build) - [🐙](https://github.com/electron-userland/electron-builder) - A complete solution to package and build a ready for distribution Electron app with “auto update” support out of the box.
299 |
300 | ##### Resources
301 |
302 | - [Vue.js & Electron: The easy way. – Mikeal](https://medium.com/@mikeal/vue-js-electron-the-easy-way-adc3ca09234a)
303 | - [How to use Vue.js with Electron and Vuex](https://alligator.io/vuejs/vue-electron/)
304 |
305 | ### Code Coverage & CI [↗](https://awesomestacks.dev/code-coverage-and-ci)
306 |
307 | Quickest way to get started with CI and Code Coverage.
308 |
309 | - [CircleCI](https://circleci.com/) - [🛠](https://stackshare.io/circleci) - Popular managed CI server.
310 | - [Codecov](https://codecov.io/) - [🛠️](https://stackshare.io/codecov) - Hosted coverage reports with awesome features to enhance your CI workflow.
311 | - [Bash](https://www.gnu.org/software/bash/) - [🛠](https://stackshare.io/gnu-bash) - The Bourne Again SHell is an sh-compatible shell.
312 | - [GitHub](https://github.com/) - [🛠](https://stackshare.io/github) - Powerful collaboration, review, and code management for open source and private development projects.
313 |
314 | ##### Resources
315 |
316 | - [Making code coverage easy to see with Codecov & CircleCI](https://circleci.com/blog/making-code-coverage-easy-to-see-with-the-codecov-orb/)
317 | - [CI Provider Relationship](https://docs.codecov.io/docs/ci-service-relationship)
318 | - [Codecov Bash Uploader](https://docs.codecov.io/docs/about-the-codecov-bash-uploader)
319 |
320 | ### Vue SPA with Laravel [↗](https://awesomestacks.dev/vue-spa-with-laravel)
321 |
322 | The best way to create a versatile and scalable PHP Web Application! It sure will make you fall in love with PHP (if not, Laravel). Laravel team has an official collaboration with the Vue, so Vue, Babel and Sass is already integrated before you even started!
323 |
324 | - [PHP 7](https://php.net) - [🛠](https://stackshare.io/php) - [🐙](https://github.com/php/php-src) - A popular general-purpose scripting language that is especially suited for web development.
325 | - [Laravel](https://laravel.com/) - [🛠](https://stackshare.io/laravel) - [🐙](https://github.com/laravel/laravel) - One of the most popular Object Oriented MVC PHP Framework with elegant syntax and golden standard software patterns.
326 | - [Vue.js](https://vuejs.org/) - [🛠️](https://stackshare.io/vue-js) - [🐙](https://github.com/vuejs/vue) - An approachable core library that focuses on the view layer only.
327 | - [Laravel Mix](https://laravel.com/docs/5.8/mix) - [🐙](https://github.com/JeffreyWay/laravel-mix) - A build tool built on top of webpack, to easily compile any front end assets. (secret: works with or without Laravel)
328 | - [Babel](https://babeljs.io/) - [🛠️](https://stackshare.io/babel) - [🐙](https://github.com/babel/babel) - compiler for writing next generation JavaScript; Babel will turn your ES6+ code into ES5 friendly code, so you can start using it right now without waiting for browser support.
329 | - [Sass](https://sass-lang.com) - [🛠️](https://stackshare.io/sass) - [🐙](https://github.com/sass/sass) - Sass is an extension of CSS3, adding nested rules, variables, mixins, selector inheritance, and more. It's translated to well-formatted, standard CSS using the command line tool or a web-framework plugin.
330 |
331 | ##### Resources
332 | - [Building a Vue SPA with Laravel](https://laravel-news.com/using-vue-router-laravel)
333 | - [Laravel Tutorial: Step by Step Guide to Building Your First Laravel Application](https://laravel-news.com/your-first-laravel-application)
334 |
335 | ### FReMP: Flask ReactJS MongoDB Python [↗](https://awesomestacks.dev/fremp-flask-reactjs-mongodb-python)
336 |
337 | FReMP stack is a highly scalable full stack framework, which can be used to build robust and modern web apps using Flask, ReactJS, MongoDB and Python.
338 |
339 | - [Flask](https://flask.palletsprojects.com/) - [🛠️](https://stackshare.io/flask) - [🐙](https://github.com/pallets/flask) - The Python micro framework for building web applications.
340 | - [ReactJS](https://reactjs.org/) - [🛠️](https://stackshare.io/react) - [🐙](https://github.com/facebook/react) - A declarative, efficient, and flexible JavaScript library for building user interfaces.
341 | - [MongoDB](https://www.mongodb.com/) - [🛠️](https://stackshare.io/mongodb) - [🐙](https://github.com/mongodb/mongo) - A document and JSON-oriented database.
342 | - [Python](https://www.python.org/) - [🛠️](https://stackshare.io/python) - [🐙](https://github.com/python/cpython) - A programming language that lets you work quickly.
343 |
344 | ##### Resources
345 |
346 | - [How to install FReMP Stack on Ubuntu?](https://medium.com/@akhilmaulloo/how-to-install-fremp-stack-on-ubuntu-20-04-e4be2a3a88b9)
347 | - [How to build a full stack web app using FReMP?](https://medium.com/@akhilmaulloo/the-fremp-stack-building-a-full-stack-web-application-91308e505250)
348 | - [How to deploy the app to Heroku?](https://medium.com/@akhilmaulloo/the-fremp-stack-deploying-to-heroku-163254c3ca4d)
349 | - [Official Website](https://fremp.github.io)
350 | - [Github](https://github.com/FReMP)
351 | - [Boilerplate](https://github.com/FReMP/fremp)
352 |
353 | ## Back-end
354 |
355 | ### GCP Kubernetes Stack [↗](https://awesomestacks.dev/gcp-kubernetes-stack)
356 |
357 | Stack used to deploy and manage a cluster of Docker containerized applications using Google Cloud services.
358 |
359 | - [GKE](https://cloud.google.com/kubernetes-engine/) - [🛠](https://stackshare.io/google-kubernetes-engine) - Kubernetes cluster managed by Google.
360 | - [Kubernetes](https://kubernetes.io/) - [🐙](https://github.com/kubernetes/kubernetes) - [🛠](https://stackshare.io/kubernetes) - Production-Grade Container Scheduling and Management.
361 | - [Docker](https://www.docker.com/) - [🛠](https://stackshare.io/docker) - [🐙](https://github.com/docker/docker) - A tool to create, deploy and run applications inside containers.
362 | - [Stackdriver](https://cloud.google.com/stackdriver/) - [🛠️](https://stackshare.io/stackdriver) - Stackdriver Logging allows you to store, search, analyze, monitor, and alert on log data and events.
363 |
364 | ### Ethereum DApp [↗](https://awesomestacks.dev/ethereum-d-app)
365 |
366 | A collection of tools for building decentralized applications on the Ethereum blockchain.
367 |
368 | - [Solidity](https://solidity.readthedocs.io) - [🐙](https://github.com/ethereum/solidity) - Solidity is an object-oriented, high-level language for implementing smart contracts.
369 | - [web3.js](https://web3js.readthedocs.io) - [🐙](https://github.com/ethereum/web3.js) - Ethereum JavaScript API.
370 | - [db3.js](https://docs.db3.network/) - [🐙](https://github.com/dbpunk-labs/db3.js) - db3.js is the db3 network(Ethereum layer2) javascript API to write and query JSON documents
371 | - [Truffle](https://truffleframework.com/truffle) - [🐙](https://github.com/trufflesuite/truffle) - A world class development environment, testing framework and asset pipeline for blockchains using the Ethereum Virtual Machine (EVM).
372 | - [Ganache](https://truffleframework.com/ganache) - [🐙](https://github.com/trufflesuite/ganache) - Personal blockchain for Ethereum development.
373 | - [drizzle](https://truffleframework.com/drizzle) - [🐙](https://github.com/trufflesuite/drizzle) - A collection of front-end libraries that make writing dapp user interfaces easier and more predictable.
374 |
375 | ### Rails Monitoring Stack [↗](https://awesomestacks.dev/rails-monitoring-stack)
376 |
377 | Tools to use to monitor your Rails app in production.
378 |
379 | - [Skylight](https://www.skylight.io) - [🛠](https://stackshare.io/skylight) - The smart profiler for your Rails apps.
380 | - [New Relic](https://newrelic.com) - [🛠](https://stackshare.io/new-relic) - SaaS Application Performance Management for Ruby, PHP, .Net, Java, Python, and Node.js Apps.
381 | - [rack-mini-profiler](https://github.com/MiniProfiler/rack-mini-profiler) - [🐙](https://github.com/MiniProfiler/rack-mini-profiler) - Profiler for your development and production Ruby rack apps.
382 | - [Sqreen](https://www.sqreen.com/) - [🛠](https://stackshare.io/sqreen) - Security monitoring and protection for Ruby, PHP, Java, Go, Python, and Node.js Apps.
383 |
384 | ### User Behavior Analytics via Segment [↗](https://awesomestacks.dev/user-behavior-analytics-via-segment)
385 |
386 | Hosted tools to use to analyze user behavior for a web app.
387 |
388 | - [Segment](https://segment.com) - [🛠️](https://stackshare.io/segment) - A single hub to collect, translate and send your data with the flip of a switch.
389 | - [Google Analytics](https://marketingplatform.google.com/about/analytics/) - [🛠️](https://stackshare.io/google-analytics) - Enterprise-class web analytics.
390 | - [Amplitude](https://amplitude.com) - [🛠️](https://stackshare.io/amplitude) - User analytics to fuel explosive user growth.
391 | - [FullStory](https://www.fullstory.com/) - [🛠️](https://stackshare.io/fullstory) - Capture all your customer experience data in one powerful, easy-to-use platform.
392 |
393 | ### Streaming Analytics with Kafka, Spark, and Cassandra [↗](https://awesomestacks.dev/streaming-analytics-with-kafka-spark-and-cassandra)
394 |
395 | The Kafka-Spark-Cassandra pipeline for processing a firehose of incoming events.
396 |
397 | - [Kafka](http://kafka.apache.org/) - [🛠](https://stackshare.io/kafka) - [🐙](https://github.com/apache/kafka) - Distributed, fault tolerant, high throughput pub-sub messaging system.
398 | - [Apache Spark](https://spark.apache.org) - [🛠](https://stackshare.io/spark) - [🐙](https://github.com/apache/spark) - Fast and general engine for large-scale data processing.
399 | - [Cassandra](http://cassandra.apache.org) - [🛠](https://stackshare.io/cassandra) - [🐙](https://github.com/apache/cassandra) - Highly-scalable partitioned row store.
400 |
401 | ##### Resources
402 |
403 | - [kafka-sparkstreaming-cassandra](https://github.com/Yannael/kafka-sparkstreaming-cassandra)
404 | - [Applying the Lambda Architecture with Spark, Kafka, and Cassandra](https://www.pluralsight.com/courses/spark-kafka-cassandra-applying-lambda-architecture)
405 | - [Streaming Analytics with Spark, Kafka, Cassandra, and Akka](https://databricks.com/session/streaming-analytics-with-spark-kafka-cassandra-and-akka)
406 |
407 | ### Self-Hosted Devops and Collaboration [↗](https://awesomestacks.dev/self-hosted-devops-and-collaboration)
408 |
409 | Self-hosted open source devops and collaboration tools, suitable for enterprise.
410 |
411 | - [GitLab](https://about.gitlab.com/) - [🛠](https://stackshare.io/gitlab) - [🐙](https://github.com/gitlabhq/gitlabhq) - Open source self-hosted Git management software.
412 | - [Zulip](https://zulipchat.com) - [🛠](https://stackshare.io/zulip) - [🐙](https://github.com/zulip/zulip) - Powerful open source team chat.
413 | - [Hubot](https://hubot.github.com) - [🛠](https://stackshare.io/hubot) - [🐙](https://github.com/hubotio/hubot) - A customizable life embetterment robot.
414 | - [Sentry](https://sentry.io) - [🛠](https://stackshare.io/sentry) - [🐙](https://github.com/getsentry/sentry) - Cross-platform application monitoring, with a focus on error reporting.
415 | - [Taiga.io](https://taiga.io) - [🛠](https://stackshare.io/taiga) - [🐙](https://github.com/taigaio) - Project management web application with scrum in mind.
416 | - [Metabase](https://www.metabase.com/) - [🛠](https://stackshare.io/metabase) - [🐙](https://github.com/metabase/metabase) - An open-source business intelligence tool.
417 |
418 |
419 | ### Production Ready Django + Docker [↗](https://awesomestacks.dev/production-ready-django-docker)
420 |
421 | Bleeding edge Django template focused on code quality and security.
422 |
423 | Build, test, and deploy pipelines are configured by default.
424 |
425 | - [Python 3](https://www.python.org/) - [🛠](https://stackshare.io/python) - [🐙](https://github.com/python/cpython) - A programming language that lets you work quickly.
426 | - [Django](https://www.djangoproject.com/) - [🛠](https://stackshare.io/django) - [🐙](https://github.com/django/django) - The Web framework for perfectionists with deadlines.
427 | - [Docker](https://www.docker.com/) - [🛠](https://stackshare.io/docker) - [🐙](https://github.com/docker/docker) - A tool to create, deploy and run applications inside containers.
428 | - [GitLab](https://about.gitlab.com/) - [🛠](https://stackshare.io/gitlab) - [🐙](https://github.com/gitlabhq/gitlabhq) - Open source self-hosted Git management software.
429 | - [Caddy](https://caddyserver.com/) - [🛠](https://stackshare.io/caddy) - [🐙](https://github.com/mholt/caddy) - The HTTP/2 Web Server with Automatic HTTPS.
430 |
431 | ##### Resources
432 |
433 | - [wemake-django-template](https://github.com/wemake-services/wemake-django-template)
434 |
435 | ### RESTful API with Java and Spring Boot [↗](https://awesomestacks.dev/res-tful-api-with-java-and-spring-boot)
436 |
437 | Build a simple and robust RESTful API.
438 |
439 | - [Spring Boot](https://spring.io/projects/spring-boot) - [🛠](https://stackshare.io/spring-boot) - [🐙](https://github.com/spring-projects/spring-boot) - Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can "just run".
440 | - [Gradle](https://gradle.org/) - [🛠️](https://stackshare.io/gradle) - [🐙](https://github.com/gradle/gradle)- A build tool with a focus on build automation and support for multi-language development.
441 | - [Java](https://docs.oracle.com/javase/specs/index.html) - [🛠️](https://stackshare.io/java) - Java is an Object-Oriented and one of the most used programming languages in the world.
442 |
443 | #### Resources
444 |
445 | - [Building an Application with Spring Boot](https://spring.io/guides/gs/spring-boot/)
446 |
447 | ### Graphweaver - GraphQL API Over Multiple Datasources [↗](https://awesomestacks.dev/graphweaver-graphql-api-over-multiple-datasources)
448 |
449 | Connect to various datasources and combine the data into a real-time GraphQL API and AdminUI. Useful stack when you have multiple datasources such as Postgres, MySql, Sqlite, Rest, etc.
450 |
451 | - [Graphweaver](https://graphweaver.com/) - [🛠️](https://stackshare.io/graphweaver) - [🐙](https://github.com/exogee-technology/graphweaver) - Data Everywhere - Instant GraphQL.
452 | - [ReactJS](https://reactjs.org/) - [🛠️](https://stackshare.io/react) - [🐙](https://github.com/facebook/react) - The adminUI is built in React and can be extended.
453 | - [AWS Lambda](https://aws.amazon.com/lambda) - [🛠️](https://stackshare.io/aws-lambda) - Deployable as a single JS bundle to lambda.
454 | - [AWS Cognito](https://aws.amazon.com/cognito) - Pre-built integration with AWS Cognito.
455 |
456 | ##### Resources
457 |
458 | - [Connect to a datasource](https://graphweaver.com/docs/connect-to-a-data-source)
459 |
460 | ## Mobile
461 |
462 | ### React Native with Expo and Hasura [↗](https://awesomestacks.dev/react-native-with-expo-and-hasura)
463 |
464 | Hasura is an open source GraphQL engine that deploys instant, real-time GraphQL APIs on any Postgres database. This React Native stack uses Hasura droplets hosted on Digital Ocean.
465 |
466 | - [Hasura](https://hasura.io/) - [🛠️](https://stackshare.io/hasura) - [🐙](https://github.com/hasura/graphql-engine) - Blazing fast, instant real-time GraphQL APIs on Postgres with fine grained access control.
467 | - [React Native](https://facebook.github.io/react-native/) - [🛠️](https://stackshare.io/react-native) - [🐙](https://github.com/facebook/react-native) - Build native mobile apps using JavaScript and React.
468 | - [Expo](https://expo.io/) - [🛠️](https://stackshare.io/expo) - [🐙](https://github.com/expo/expo) - Build, deploy, and quickly iterate on native iOS and Android apps from the same JavaScript codebase.
469 | - [Digital Ocean](https://www.digitalocean.com/) - [🛠️](https://stackshare.io/digitalocean) - [🐙](https://github.com/digitalocean/) - Deploy an SSD cloud server in less than 55 seconds with a dedicated IP and root access.
470 | - [Auth0](https://auth0.com/) - [🛠️](https://stackshare.io/auth0) - A universal authentication & authorization platform for web, mobile and legacy applications.
471 |
472 | ##### Resources
473 |
474 | - [Udemy course: Learn the Newest and EASIEST React Native Stack](https://www.udemy.com/course/how-to-make-a-full-stack-react-native-app-with-easy-backend/?referralCode=E944B7F521E0A6B88CD2)
475 | - [Tutorial: Fullstack React Native with GraphQL and Authentication](https://blog.hasura.io/tutorial-fullstack-react-native-with-graphql-and-authentication-18183d13373a/)
476 | - [Guide: Hasura GraphQL Engine One-click App on DigitalOcean Marketplace](https://docs.hasura.io/1.0/graphql/manual/guides/deployment/digital-ocean-one-click.html)
477 |
478 | ### Unity Game Development boilerplate [↗](https://awesomestacks.dev/unity-Game-Development-boilerplate)
479 |
480 | Unity is a game engine that connects to Plastic SCM to keep version control and large asset and huge repo management clean and frictionless.
481 |
482 | - [Unity](https://unity.com/) - [🛠](https://stackshare.io/unity-3d) - [🐙](https://github.com/Unity-Technologies/UnityCsReference) - The C# part of the Unity engine and editor source code. May be used for reference purposes only.
483 | - [Plastic SCM](https://www.plasticscm.com/) - [🛠️](https://stackshare.io/plastic-scm) - [🐙](https://github.com/PlasticSCM/plastic-docker) - PlasticSCM Docker image.
484 | - [TeamCity](https://www.jetbrains.com/teamcity/) - [🛠](https://stackshare.io/teamcity) - A Java-based build management and continuous integration server from JetBrains.
485 |
486 | ##### Resources
487 |
488 | - [First steps with Plastic SCM in Unity](https://www.youtube.com/playlist?list=PL29P1RRr5_NzEhAustJCTwdahs60JvcMm)
489 | - [Plastic SCM for Games](https://www.plasticscm.com/games)
490 |
491 | ### Workflow Automation with GitHub, Jira and Jenkins [↗](https://awesomestacks.dev/workflow-automation-with-git-hub-jira-and-jenkins)
492 |
493 | Boost your Productivity with GitHub, Jira and Jenkins.
494 |
495 | - [Jenkins](https://jenkins.io/) - [🛠️](https://stackshare.io/jenkins) - [🐙](https://github.com/jenkinsci/jenkins) - Open source automation server for CI/CD.
496 | - [GitHub](https://github.com/) - [🛠](https://stackshare.io/github) - The site to keep your code and open it to world.
497 | - [Jira](https://es.atlassian.com/software/jira) - [🛠️](https://stackshare.io/jira) - Agile software development.
498 | - [Slack](https://slack.com) - [🛠️](https://stackshare.io/slack) - Where work flows.
499 |
500 | ##### Resources
501 |
502 | - [Integrating Jira, GitHub, Jenkins, and Slack in your workflow](https://support.acquia.com/hc/en-us/articles/360005167214-Integrating-JIRA-GitHub-Jenkins-and-Slack-in-your-workflow)
503 |
504 |
505 | ## Contributing
506 |
507 | See [CONTRIBUTING.md](./CONTRIBUTING.md) for information and guides on how to contribute stacks and tools.
508 |
509 | ## License
510 |
511 | [](https://creativecommons.org/publicdomain/zero/1.0/)
512 |
513 | To the extent possible under law, [StackShare](https://stackshare.io) has waived all copyright and related or neighboring rights to this work [README](/README.md)
514 |
515 |
--------------------------------------------------------------------------------