Git Product home page Git Product logo

ddev.com's Introduction

ddev.com Astro code

Source code for ddev.com’s static front end, built with Astro to keep things organized, maintainable, and fast.

Overview

Main Ingredients

Project Structure

The file structure follows a typical Astro project layout.

Most pages are built with Astro components, while blog posts and authors are sourced from local Markdown that’s validated with tidy schemas we get using content collections.

  • cache/ – custom, project-specific folder for caching GitHub responses in local developent to reduce API calls.
  • public/ – images and redirects that will be copied verbatim into the generated dist/ directory.
  • src/ – components, layouts, styles, and supporting TypeScript/JavaScript.
    • components/ – individual .astro components used in pages. (You can also use components for UI frameworks like Vue, React, and Svelte!)
    • content/ – configuration and Markdown for the blog’s content collections.
    • layouts/ – contains the single component we use for every page.
    • lib/ – helper code for fetching data from GitHub, building the search index, injecting read time into frontmatter, and handling common formatting.
    • pages/.astro pages whose filenames directly translate into routes for the site.
    • styles/ – global PostCSS that’s not already handled by the Tailwind plugin.
  • .env.example – file you’ll want to rename .env and populate for a new environment.
  • .nvmrc – Node.js version to support nvm use.
  • .prettierrc – rules for Prettier code formatting.
  • astro.config.mjs – Astro configuration.
  • package.json – standard file that details the project’s packages and versions.
  • README.md – you are here! 👋
  • tailwind.config.cjsconfiguration for Tailwind and the Tailwind Typography plugin we’re using.
  • tsconfig.jsonTypeScript configuration.

Development

Commands

All commands are run from the root of the project, from a terminal:

Command Action
npm install Installs dependencies
npm run dev Starts local dev server at localhost:3000
npm run build Build your production site to ./dist/
npm run preview Preview your build locally, before deploying
npm run astro ... Run CLI commands like astro add, astro preview
npm run astro --help Get help using the Astro CLI
npm run textlint Run textlint on content collections
npm run textlint:fix Apply fixable updates to resolve textlint errors

Local Development Setup

  1. Run cp .env.example .env to create a .env file for environment variables. (Don’t check this in!)
  2. Create a classic GitHub access token with these scopes: repo, read:org, read:user, and read:project.
  3. Paste the GitHub token after .env’s GITHUB_TOKEN=.

DDEV setup

DDEV already has all the dependencies included.

  1. Run ddev start to start and set up the project’s dependencies.

To rebuild a static copy of the site, run ddev npm run build. The contents of the dist/ folder are what gets deployed to Cloudflare Pages and can be found at https://.ddev.site. The dev server runs on a web_extra_daemons, it includes Vite HMR (hot module reloading) among other features and it can be found at https://.ddev.site:4321.

Troubleshooting steps

Setup without DDEV

Check out the project in your favorite Node.js environment, ideally running nvm. We’ll install dependencies, add a GitHub API key, and run a local dev server with a hot-reloading browser URL.

  1. Run nvm use to make sure you’re running an appropriate Node.js version.
  2. Run npm install to set up the project’s dependencies.
  3. Run npm run dev to start Astro’s dev server. If it fails then run npm cache clean --force && npm install && npm run dev.
  4. Visit the URL displayed in your terminal. (Probably http://localhost:4321/.) The site will automatically refresh as you work on it, displaying errors in the relevant terminal or browser console.

To generate a static copy of the site, run npm run build. The contents of the dist/ folder are exactly what get deployed to Cloudflare Pages. You can preview locally by running npm run preview or using a tool like serve.

Switching from Without DDEV to with DDEV

Make sure to delete your node_modules/ directory and run ddev npm install. The change in architecture can create odd issues otherwise.

Managing Content

The site’s content lives in either .astro components that resemble souped-up HTML, or Markdown files organized into schema-validated content collections.

Blog Posts

Blog posts are Markdown files with frontmatter that live in src/content/blog/.

To add a new blog post, use this Markdown as a template:

---
title: "It’s A Post!"
pubDate: 2023-01-01
summary:
author: Randy Fay
featureImage:
  src: /img/blog/kebab-case.jpg
  alt:
  caption:
  credit:
categories:
  - DevOps
---

Name your file with a kebab-case, URL-and-SEO-friendly slug with a .md extension, and drop it in the src/content/blog/ directory.

Give it a succinct title, and if you include a feature image be sure to write descriptive alt text along with an optional caption and image credit. The caption: and credit: fields can both use Markdown, but you’ll probably need to wrap the whole value in straight quotes (").

The Astro build doesn’t do any fancy image sizing or optimization, so be sure any images you add are production-ready: an appropriate format for the image type (JPEG, PNG, or SVG), with size no larger than ~1–2MB and dimensions no greater than 2000px or so. Use an app like ImageOptim to quickly apply lossless compression.

Choose whichever categories apply, with special attention to the first because it’ll be displayed on post summary cards:

  • Announcements (releases, organization news, etc.)
  • Community (events, third-party developments, etc.)
  • DevOps (workflows, infrastructure, etc.)
  • Performance (benchmarking, tips, etc.)
  • Guides (how-to style posts)
  • TechNotes (more technical code-level discussions)
  • Training (contributor training)
  • Videos (posts that include or primarily feature video content)

💡 If you’re publishing work from a new author, add an entry for them in src/content/authors/! The "name" value needs to match the one you’re using in your post frontmatter.

Pages

Add a .astro file to the pages/ directory, where its name will become the page slug. Use an existing page to grab and re-use whatever layout and components you can to save yourself time and encourage consistency with the rest of the site.

If you need to dynamically add multiple pages, see files with brackets like src/blog/[page].astro, src/blog/category/[slug].astro, and src/blog/author/[slug].astro for examples.

Textlint

A basic textlint configuration lives in .textlintrc and runs against src/content/** to try and help keep language consistent and accurate. This doesn’t yet conform to the DDEV docs spellcheck rules and massive exclusion list, but ideally the two can someday converge.

Textlint’s default terminology catches a lot of accepted best practices on its own, where the only major override is to allow “website” (instead of its suggested “site”) because it’s rampant in blog posts and documentation. Same with the “front end” and “back end” conundrum and two-word “command line”.

Run npm run textlint to check everything, and you can apply “fixable” changes using npm run textlint:fix. Be careful automating fixes to be sure they don’t have any unintended side effects!

Sponsor Management

The src/featured-sponsors.json file is used for manually curating prominent sponsors.

While it’s a bit of a pain and still relies on coercion in some places, it lets us collect pristine, brand-friendly resources in one place and use them in different contexts.

It’s used to display sponsor details in a few places:

  1. The homepage “Featured Sponsors” list.
  2. The leading bubbles on the Support DDEV page’s “Sponsor Development” grid.
  3. The procedurally-generated featured sponsors light and dark SVG images used in the main project readme.

If you’re adding a new item to the array, choose whichever position it should appear in and use the following format:

{
  "name": "Platform.sh",
  "type": "major",
  "logo": "/logos/platform.sh.svg",
  "squareLogo": "/logos/platform.sh-square.svg",
  "url": "https://platform.sh",
  "github": "platformsh",
},
  • name – the human-friendly organization name. (Be sure this is formatted exactly as it’s used on the website or GitHub profile!)
  • type – can be "major" or "standard" depending on contribution level. (Not currently used but can affect styling later.)
  • logo – absolute, webroot-relative path for a logo you’ve added to the public/logos/ directory. Make sure this is a clean, optimized vector SVG file unless it’s a person’s headshot. (Again, follow the organization’s brand guide wherever possible!)
  • squareLogo – a square variant of the organization’s logo, to be used in places like the Support DDEV layout. No need to add this if logo is already square.
  • url – organization’s website URL.
  • github – optional GitHub username when relevant, which can be used to make sure the sponsor doesn’t appear twice in a list—as seen in the Sponsors.astro component.

Build & Deployment

For the site to exist at ddev.com, it needs to be built and hosted somewhere. Cloudflare Pages responds to commits in order to build and deploy the site.

On every push to the main branch, the following happens:

  • GitHub Actions tests the site using this workflow.
  • Cloudflare Pages runs npm run build, and deploys the resulting output from dist/.
    • Cloudflare Pages is also configured to build previews for branches on this repository. It will automatically add a comment with the build status and eventual URL(s) to any PR.

Secrets

The site uses Octokit to make REST and GraphQL API requests for repository and contribution details from github.com. It needs an API token to authenticate these requests to function and avoid hitting quota limits.

GitHub supplies its own private GITHUB_TOKEN in the GitHub Actions build environment. In any other environment, including local development, you’ll need to populate a GITHUB_TOKEN environment variable with a classic GitHub personal access token that has repo, read:org, read:user, and read:project scopes.

A valid Personal Access Token (PAT) must also be supplied to Cloudflare.

Resources

ddev.com's People

Contributors

mattstein avatar rfay avatar bmartinez287 avatar stasadev avatar dependabot[bot] avatar mandrasch avatar kristin-wiseman avatar skeemer avatar rowbotony avatar tyler36 avatar agviu avatar bencroker avatar bbhupen avatar lblomenkemper avatar sonvir249 avatar

Stargazers

 avatar Ali Osman avatar  avatar Nikola Hristov avatar Vladislav Burlak avatar  avatar Daniel Haupt avatar  avatar  avatar Andrea avatar  avatar

Watchers

 avatar  avatar Mayank Gupta avatar  avatar  avatar

ddev.com's Issues

Redo support-ddev page to use cards

I was thinking about redoing
https://ddev.com/support-ddev/
and make it look like
https://ddev.com/blog/.

By making those into cards the content at the bottom of the page is more likely to be seen and we could resort to those items by the time of investment required. For example:

Contributions can be made in multiple ways. Resources vary on each contributor's background. As a new or season contributor feel free to choose one or many.

Spread the Word
Sponsor Development
Join the Advisory Group

Help Others
Improve the Docs
File an Issue or PR

thoughts?

Establish production redirects

Redirect current (eventual legacy) production URLs to newer equivalents.

  • ddev-local/*blog/*
  • meet-the-teamblog/authors
  • contact → ?
  • author detail URLs
    • /author/elli/blog/author/elli-ludwigson
    • /author/heather/blog/author/heather-mcnamee
    • /author/horncologne/blog/author/jeffrey-a-mcguire
    • /author/jdarrohn/blog/author/jed-darrohn (does not have any posts)
    • /author/kbridges/blog/author/kevin-bridges
    • /author/kcunningham/blog/author/kory-cunningham
    • /author/mikeanello/blog/author/mike-anello
    • /author/nmd-admin/blog/author/ddev
    • /author/rfay/blog/author/randy-fay
    • /author/rmanelius/blog/author/rick-manelius

ddev store - new income for ddev foundation.

Laravel runs a simple store on https://www.bigcartel.com.
It be interesting if ddev could have one as a way to generate funds and encourage people to spend money on merch.

https://laravel.bigcartel.com/

I would buy a ddev T-shirt and maybe some other cool items as they appear.

It would be important that the store can handle most shipping and handling, storage, and other challenges. That way we could focus on adding products and adding ddev branding on them. Even if they take a good margin of the profit this would be added revenue that would help spread the word and provide something tangible for collectors and those interested in contributing to Ddev financially.

I will add it to Discord later and see if there is another issue related to this but I opened it here since it's part of the marketing of ddev that likely belongs more to the ddev.com than the product itself.

Update guide for codespaces, remove docker-in-docker

  • After ddev/ddev#5267 is merged, guide on homepage needs an update as well
  • docker-in-docker is not needed anymore if the universal image is used

Guide: https://ddev.com/get-started/
image

Don't have the time resources in the next days to dive into astro (missed the contributor training unfortunately) and provide a PR, but I could provide it in the next weeks.

Just wanted to create the issue so that this does not get lost. Cheers!

Add Contributor Byline on Articles

To encourage and promote contributed articles. We should add that byline Randy was talking about a while back.
It provides visible contribution credit for those adding blogs to the site.
Contributor is technically the correct term but Added by sounds nicer and more modern. Thoughts?
I'm good with either.
I also thought of Editor or Patron or other terms, but those don't fit in some cases. Like there might be multiple editors, but only one contributor since that person created said PR.

contributorimage
addedby

Prune blog posts

Related to the effort in #31, we’ll need to decide what to do with old blog posts. That means reviewing the list of remaining posts, and deciding which should be removed. If there’s an appropriate redirect for a deleted post, we should identify that here as well.

Posts to Keep

The following exhaustive list catalogs the blog posts we have left, in reverse-chronological order, with a link to each one’s detail page on the preview build.

Check off any posts that should stay. If the post should be deleted, specify redirects in the Redirects Needed section below.

Redirects Needed

List any deleted URL paths and the URLs they should redirect to so we can help readers and preserve SEO value.

Example:

  • /blog/customizing-ddev-local-images-with-a-custom-dockerfilehttps://ddev.readthedocs.io/en/latest/users/extend/customizing-images/

Install analytics

Being able to evaluate engagement and referrers will help us focus our marketing energy in productive places and shape future efforts. We should set up analytics that collect information with minimal impact on visitor privacy and load time.

Related: ddev/ddev#4367

Implement internal site search

Hook up the search feature that currently does nothing. Ideally include a custom analytics event to help us understand what people look for.

This should search blog posts and internal pages. Possibly documentation as well if we can figure that out and maintain a simple UX.

Perform a baseline accessibility pass

While it’d be nice to target a specific level of compliance, we need to do an initial pass to make sure the site’s accessibility isn’t a dumpster fire.

Improve “Get Started” page

Make it impossible to get lost and reduce the need to jump away.

  • Make it more visual, possibly with the ability to select a platform all steps can follow.
  • Provide simple, concrete steps for the user to follow (with no alternate options or decision points).

Per 1/9 discussion in Discord, we should carefully consider a CMS-agnostic start so we don’t lose people thinking DDEV only supports specific CMSes.

Add blog listing pagination

Need to be paginating that list for decency, possibly offering filters even though that could be excessive.

Image

Migrate existing one-off page content

Migrate one-off pages that would be easier to manage in a static form—basically anything that’s not a blog post or serial-style post. This will make it easier for developers to make changes to the site, faster to build, and more flexible with support for just about anything you could do with HTML or UI components.

To Migrate

To Omit

Safe to leave behind and not migrate.

Questions

  1. What’s the purpose of the five community pages? (Which look like blog posts.)
    • /community/come-on-the-journey-from-rfp-to-release-at-drupalcon-nashville
    • /community/drupalcon-nashville-new-ddev-users-contribution-with-quicksprint-and-more
    • /community/drupalcon-seattle-wrap-up
    • /community/get-started-with-local-development-for-drupal
    • /community/kubecon-barcelona-wrap-up
  2. Same with the single event: should we keep that? Plan to expand that section?

Add author photo for Matt

My plan is to use @mattstein 's photo from his GitHub profile and add it to the public/img/avatar directory as well as update his author page accordingly.

Integrate docs into ddev.com

The unbranded ddev.readthedocs.io is fine, but it would be much better for it to be incorporated into ddev.com.

We can definitely redirect the old into a new spot; that's the easy part.

The harder part is styling and branding the docs into ddev.com. But what a great step it would be for ddev.com/docs (probably equivalent to docs.ddev.com?) were in there.

Establish basic site and on-page SEO

Get the basics in place for a healthy SEO baseline:

  • page titles
  • meta descriptions
  • open graph tags
  • robots page meta
  • canonical URLs
  • ability to customize any of the above on a per-page basis
  • robots.txt
  • sitemap.xml

Establish deployment pipeline

We’ll need to be able to manually build and deploy the site, and also have builds get triggered from WordPress when new posts are ready.

  • identify target infrastructure (Platform.sh, GitHub Pages, Vercel, etc.)
  • identify CDN (Cloudflare, etc.)
  • establish pipeline (probably with GitHub Actions)

Create a “Support DDEV” page

One of the most severe disadvantages of the current ddev.com is that it doesn’t encourage someone to contribute to the cause. This page should describe clear calls to action for anyone hoping to contribute their time or resources.

  • contributing to development
  • contributing to documentation
  • financial support
  • helping with advisory or promotional efforts

New section: "DDEV Foundation"

We're on the cusp of being able to rename the Localdev Foundation to "DDEV Foundation", and then it really makes sense to have the modest documentation about it on ddev.com rather than localdev.foundation. Maybe a "Foundation" top-level page, or an addition to the "support" page?

Add @bmartinez287 as privileged maintainer

@bmartinez287 -

@mattstein and I have so much appreciated your care and curation of this project, and we'd love to see it continue. I've just given you increased privileges ("write"), which means you can pull PRs or could even commit directly.

I'd like you to not use those privileges at this point, but continue using basically the same process (Discuss, create a PR, get review, get it merged). I guess the only difference would be that if @mattstein tells you to pull it, you CAN!

THANK YOU!

Migrate syndication feeds

We should maintain the existing blog post feeds and make sure RSS is in there, with minimal disruption for subscribers.

Page output includes these link tags, which I assume come from different sources/plugins:

<link rel="https://api.w.org/" href="https://ddev.com/wp-json/"/>
<link rel="alternate" type="application/json" href="https://ddev.com/wp-json/wp/v2/posts/4193"/>
<link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://ddev.com/wp/xmlrpc.php?rsd"/>
<link rel="wlwmanifest" type="application/wlwmanifest+xml" href="https://ddev.com/wp/wp-includes/wlwmanifest.xml"/>
<link rel="alternate" type="application/json+oembed" href="https://ddev.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fddev.com%2Fddev-local%2Fddev-docker-desktop-and-colima-benchmarking-updated-dec-2022%2F"/>
<link rel="alternate" type="text/xml+oembed" href="https://ddev.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fddev.com%2Fddev-local%2Fddev-docker-desktop-and-colima-benchmarking-updated-dec-2022%2F&#038;format=xml"/>

No idea which are in use, so it might be prudent to audit with anyone more intimately acquainted with the website. If it’s possible to prune some low-value or unused feeds, it’d reduce the future maintenance burden.

Clean up legacy post content

Clean up post history for overall consistency.

  • consider replacing impersonal “DDEV” author with Randy if he was the actual author, or having authorless posts if we must
  • recategorize posts:
    • Announcements (releases, organization news, etc.)
    • Community (events, third-party developments, etc.)
    • DevOps (workflows, infrastructure, etc.)
    • Performance (benchmarking, tips, etc.)
    • Guides (how-to style posts)
  • remove obsolete newsletter CTAs
  • add fallback thumbnail images
  • support real Markdown citations
  • re-add videos that were stripped out of Markdown conversion
  • audit language and formatting per writing style guide
  • replace any frightening imagery, and either add defaults as backup or include hero images for older posts
  • remove any older posts that don’t have lasting value (moved to #37)

Improve blog post image handling

Author and post images currently come directly from uploaded WordPress assets without any transformation or optimization. Ideally we’d be automatically transforming them and using srcset for performant art direction. We also probably want to limit traffic directly to the WordPress server and use a CDN.

This issue needs more clarity before it’ll be actionable!

Finish blog post detail template

Detail template needs to be visually balanced, include pagination links of some sort, and probably expose taxonomy.

  • add post author
  • add read time
  • expose taxonomy
  • add footer pagination

Improve repository list

On the front page there's a nice repository list that has ddev/ddev and ddev/ddev-contrib and ddev/awesome-ddev. The first one is what we want, but we should add others. Add-ons?

image

Create component for styled terminal prompts

Create a component with very simple terminal prompt chrome that can reinforce, for future examples, that we’re looking at things happening in terminals and not fenced code blocks that highlight files to be edited. Can someday be used in the docs.

Improve “About” page, including project history

DDEV is a project with a long history that’s actively maintained and supported by generous people. Sharing this story will help people understand and hopefully trust DDEV as a valuable tool, and not a stale side project that happens to be useful for now.

The current about page is pretty much hidden, but it’s a good start. It links, however, to a non-existent introduction and handbook.

Add social links

Add the usual social media links so those accounts are easy to find.

Probably best to scrutinize how accounts are actually used, but that’s an issue for another day.

The Twitter one’s cheating since it’s not actually an account, but done for now:

Image

Improve sponsor promotion

#44 implied that we could be doing a better job of promoting project sponsors and acknowledging various levels of commitment.

I propose we do the following:

  • Create/generate a .svg image to embed in the ddev/ddev readme, so we can consistently use high-quality logos from the same source and fix abhorrent spacing issues that aren’t kind to any of them.
  • Visually emphasize top-level sponsors on the ddev.com homepage, and possibly do the same thing with the readme.
  • Again promote top-level sponsors globally in ddev.com’s footer, which has a lot of room for it.
  • Identify any other opportunities within repositories, ddev.com, the docs, etc. that might tastefully promote sponsors without getting in the way of whatever the user/reader is doing.

Whatever “top-level” means, we should also update the GitHub sponsors page to reflect a clear policy for this so it’s fair and always apparent where sponsor logos need to go.

Re-enable `robots.txt` crawl

The current robots.txt file is configured to disallow indexing while we’re in development:

robotsTxt({
  sitemap: false,
  policy: [{ disallow: "/", userAgent: "*" }],
}),

We’ll naturally want to remove that policy line, which defaults to allow /, once we’re ready to go live.

Update WordPress blog author descriptions

Descriptions are pulled from WordPress and rendered as Markdown. They could use some minor refreshing and link-fixing:

  • Mike Anello: link @ultimike
  • DDEV: remove handbook.ddev.com reference

Swap #ffffff background for darker white.

Screen Shot 2023-10-15 at 10 36 31 PM Screen Shot 2023-10-15 at 10 28 39 PM Screen Shot 2023-10-15 at 10 27 22 PM

So I was wondering if we could swap the current white background from #ffffff which is the purest white to one that is a bit darker like the colors above.
Thoughts?

Retire WordPress install

Once static, one-off page content is moved into the Astro project, those same items should be archived or deleted in WordPress so they don‘t cause confusion.

Otherwise, someone may edit a WordPress entry only to be surprised it has no effect on what’s published at ddev.com.

Hero h1 margin and padding on mobile widths.

Before

Screen Shot 2023-09-24 at 7 27 00 PM

After

Screen Shot 2023-09-24 at 7 23 41 PM

There seems to be too much margin and padding on mobile devices.
At around 640px width there does not seem to be a need for the top margin and top padding to be so large.

Should I proceed with a PR and change the top margin and padding until it exceeds 640 which is tailwindcss sm breakpoint

Explanation/promotion of contributor/maintainer opportunities

There are so many opportunities for contributors at many levels in DDEV. We need to make it clear what they are.

DDEV is a mix of many different technologies, including Go, Linux, Bash, Docker, PHP, Python, and many others, and has an extensive automated testing and CI system that must be maintained. In addition, the DDEV Add-on ecosystem uses a variety of technologies including bash and PHP. We need maintainers for all of these, and mentorship is available for those who want to learn. Paid work is available for those who want to commit to work beyond the basics.

Bing suggests these strategies:
I'm glad you're interested in DDEV and want to spread the word about it. Here are some ideas on how to explain the opportunities available to potential contributors and maintainers:

  • Highlight the benefits of contributing to DDEV. You can mention how DDEV is an open-source local web development environment that supports a variety of technologies and frameworks, such as Golang, Docker, Linux, Bash, PHP, Python and more. You can also mention how DDEV offers mentorship for those who want to learn something new, such as Golang, and how contributors can get paid for their work if they wish.
  • Make it easy for newcomers to get started with DDEV. You can provide clear and detailed documentation on how to install, configure and use DDEV, as well as how to report issues, submit pull requests and follow the code of conduct. You can also label beginner-friendly issues appropriately, such as good first bug, easy, low hanging fruit, etc., and provide guidance and feedback for new contributors²¹.
  • Showcase the existing community and culture of DDEV. You can share stories and testimonials from current contributors and maintainers, and highlight their achievements and challenges. You can also invite potential contributors to join your communication channels, such as Discord, Slack, Twitter, etc., where they can interact with other members of the DDEV community, ask questions, share ideas and learn from each other⁴³.
  • Promote your project through various channels. You can use platforms such as GitHub, Dev.to, Hashnode, Aviyel, Opensource.com, etc., to write blog posts about DDEV, its features, updates, use cases, tutorials, etc. You can also use platforms such as Twitter, podcasts or Twitter Spaces to talk about your project, its vision, goals and challenges. You can also participate in conferences or events where you can showcase your project and attract new contributors³⁴.

I hope these ideas help you explain the opportunities available to potential contributors and maintainers of DDEV. Good luck with your project! 😊

Source: Conversation with Bing, 5/1/2023
(1) How to attract new contributors to your open source project - FreeCodecamp. https://www.freecodecamp.org/news/how-to-attract-new-contributors-to-your-open-source-project-46f8b791d787/.
(2) 10 tips for onboarding open source contributors. https://opensource.com/article/19/12/open-source-contributors.
(3) How to attract new contributors to your open source project. https://medium.com/free-code-camp/how-to-attract-new-contributors-to-your-open-source-project-46f8b791d787.
(4) Attract contributors to your open source project with authenticity. https://opensource.com/article/22/6/attract-contributors-open-source-project.
(5) 7 strategies for success when contributing to open source. https://opensource.com/article/22/1/open-source-contributions-career.

Expose GitHub stars on homepage

GitHub stars are a common indicator of interest and momentum, and exposing them will offer a form of social proof and possibly encourage people to star the project themselves.

Managed to do this somewhat accidentally when I created repository cards toward the bottom of the page intended to function like CTAs:

Image

Request for RSS feed

@alberto64 contacted me via Twitter and asked that we enable an RSS feed on the ddev.com blog. I am surprised it's not there by default, and of course, that will be impacted by this ongoing work.

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.