Giter Club home page Giter Club logo

ipfs-blog's Introduction

IPFS Blog & News

Image of IPFS blog displayed on a laptop

This repository contains code and content for the IPFS Blog & News website. To contribute to the site, please follow the instructions below for post authors/editors and site developers.

If you just want to submit a link (event, academic paper, tutorial, video or news coverage) to add to the site, use this easy form!

Creating a new blog post via Github pull request

Each blog post is a markdown file in the src/_blog folder, with a little metadata at the top (known as YAML frontmatter) to help us create the post index page.

A blog post looks like this:

---
title: Announcing the New IPFS Community Calendar
description: 'Check out the new IPFS community calendar where you can participate and contribute to one of the many working groups advancing IPFS.'
author: Daniel Norman
date: 2022-12-15
permalink: '/2022-12-ipfs-community-calendar/'
header_image: '/ipfs-calendar/ipfs-calendar-cover.png'
tags:
  - 'community'
  - 'calendar'
  - 'working groups'
---

## The IPFS community is growing

...

To create your new post create a new markdown md file in src/_blog prefixed with the year and month (as a convention) and change the name to be relevant for your post. e.g.

$ cd src/_blog
$ touch 2022-12-community-calendar.md

Now edit the metadata at the top of the file.

  • title - used as the h1 and title tag on the post-page, and the name of the post on the index page. required
  • description - used as the meta description tag on the post-page. required
  • date - the "published at" date, shown on the blog index page, please update at posting time to reflect current date - required (posts will not be displayed until this date on the live blog, but you will see them locally when using make dev)
  • author - used to give you credit for your words - required
  • permalink - the path to the blog post. Please start and end URLs with a / (/my/url/). required
  • tags - used to categorize the blog post
  • header_image - name of the image displayed on the blog homepage. See Custom header image for more details.

Custom header image

Each post can have a custom image that is shown on the blog homepage. To set an image:

  1. Add the image into assets\header_images. Typically the image is 2048×1152px in jpg/png.

  2. Rename the image to match the file name of your post. For example, the 2022-12-community-calendar.md post uses 2022-12-community-calendar.png as the header.

  3. In the post markdown, edit the front-matter to include the header_image variable:

    header_image: 2022-12-community-calendar.png

Creating a pull request

To create a pull request, you will need to fork this repository. See the GitHub docs on how to create a pull request from a fork. If you have the GitHub CLI installed, you can use the gh pr create command from the terminal to conveniently create a pull request.

Once you create the pull request, await review. If you have permissions to merge, always preview the post first to ensure everything looks right. You can do this by clicking on the "Details" link next to the fleek/build check that runs automatically. Clicking this link will take you to a staging site where you will then need to click on the intended post in the feed to see it.

To add a URL redirect for a blog post

Please add a new line to src/.vuepress/redirects and make a PR of the change to main.

For site developers

⚠️ Important! All site development work (as opposed to blog posts) should be based on and merged into main, not staging.

Build and run locally

This site is built in Vuepress, and uses Vue/JavaScript for functional code and Markdown for post content.

To build a local copy, run the following:

  1. Clone this repository:

    git clone https://github.com/ipfs/ipfs-blog.git
  2. Move into the ipfs-blog folder and install the npm dependencies:

    cd ipfs-blog
    npm install
  3. Start the application in dev mode:

    npm start
  4. On the latest version of Node (>=18) you'll encounter ERR_OSSL_EVP_UNSUPPORTED errors. To fix this, either use Node 16 or:

    NODE_OPTIONS=--openssl-legacy-provider npm start
  5. Open localhost:8080 in your browser.

You can close the local server with CTRL + c. To restart the local server, run npm start from inside the ipfs-blog directory.

PR and preview

Once you're happy with your local changes, please make a PR against the main branch. Including detailed notes on your PR - particularly screenshots to depict any changes in UI - will help speed up approval and deployment.

All PRs against main automatically generate Fleek previews to make it easier to "check your work". You can view your PR's preview by clicking Details in the fleek/build check at the bottom of your PR page:
image

A reviewer will be by shortly to have a look!

Maintainers

This site's codebase is under active maintenance by members of the core IPFS team.

License

© Protocol Labs | Code is licensed with the MIT License. Except as noted, other content licensed CC-BY 3.0.

ipfs-blog's People

Contributors

2color avatar achingbrain avatar andyschwab avatar angiemaguire avatar aschmahmann avatar autonome avatar biglep avatar cwaring avatar damedoteth avatar dependabot[bot] avatar emilymvaughan avatar galargh avatar github-actions[bot] avatar hacdias avatar isa-chen avatar jdiogopeixoto avatar jennwrites avatar jessicaschilling avatar john-littlebearlabs avatar jorropo avatar laurentsenta avatar lidel avatar meandavejustice avatar mxinden avatar redstarcoder avatar ricardo-silva91 avatar thediscordian avatar web-flow avatar whizzzkid avatar yiannisbot avatar

Stargazers

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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ipfs-blog's Issues

General code audit

This issue is for the need for an overall code audit, focusing in particular on:

  • Modules etc that could be removed as a result of being ported over from PL blog but not needed here
  • Potential barriers to deployment over IPFS

Please separate the results out into their own issues so they're easier to work - thanks!

Format 404 page

Right now, formatting blows out on 404 pages:
image

Can we please replace with the following?
image

Remove "external site" indicators from footer links

I believe this is the only place where the VuePress-standard "external site" indicators appear. Please remove them; we have so many outbound links for news sites, etc, that they don't make sense within the context of the blog as a whole. Thank you!

image

Remove time option from datetime picker in Forestry

We don't actually ever need to get as granular as time of publication on the blog, and the addition of the time picker in the Forestry UI makes the UI itself unwieldy. Looks like we can actually remove this from the Forestry UI:
https://forestry.io/docs/settings/fields/datetime/#options

However, not sure what might need to be done on the back end or existing post pages themselves to keep from breaking things. @jdiogopeixoto, can you please have a look? 🙏

Launch cutover checklist

Prior to launch, tentatively scheduled for 8 April 2021.

For @jessicaschilling

  • Update top-level README.md to reflect latest info: Vuepress specifics, deploy details, maintainership, etc
  • Close or migrate any open issues from https://github.com/ipfs/blog/issues
  • Make this repo public
  • Add standard org-wide issue labels and issue templates
  • Confirm RSS feed works as intended (close, but added additional #119 for hotfix)
  • Protect staging branch so it can't be accidentally deleted upon merge?
  • Confirm Discourse comments display as intended (this should cut over fine as we explicitly included the preview domains in Discourse prefs, but we'll want to remove that after launch). To confirm: blog.ipfs.io, both Fleek preview domains. NOTE that http://127.0.0.1:8080/ipns/blog.ipfs.io/ and http://blog.ipfs.io.ipns.localhost:8080 are being investigated in #80
  • Make sure any Hugo redirects are migrated to Vuepress redirects (#93 handles this)
  • Ensure all content published to old blog since Feb 2021 has been migrated (NOTE: new posts are scheduled for both 7 and 8 April)
  • Make sure Forestry UI link to image crop tool points to prod location
  • Update repo description for go-live, not staging, links
  • Countly: Duplicate test dashboard for prod (including 404 info)
  • Countly: Set up dashboard/project view permissions and weekly email to relevant folks
  • Update https://ipfs.io/media/ with press-kit info (@angiemaguire is reviewing ipfs-inactive/website#421)
  • Training: @jennwrites, @autonome, @angiemaguire, @emilymvaughan, @achingbrain
  • Forestry permissioning: Investigate with @andyschwab whether this can be driven entirely from GitHub auth and groups; add users/roles as needed
  • Sync staging and main one last time
  • Send internal email and create meeting slide
  • Write blog post

For @jdiogopeixoto and/or @zebateira

For others

  • Confirm no URIs will break (If everyone can lend a hand with this, would be ideal!)
  • DNS switching (@andyschwab):
    • Stage a PR in infra repo for cutting over DNS
    • Merge and confirm after approx 10min
  • Move https://github.com/ipfs/blog into ipfs-inactive org (@jessicaschilling will file a support ticket for this; it's not time-critical but let's at least get ticket in at launch time)

Basic branding/visual review

To do

Consolidated checklist in this comment summarizes the discussion in the comments underneath ...

Note that this doesn't include font consistency issues ... will take a closer look at those in #36.

  • To increase readability of long lines of text, please modify H2 on pages without header images to max out at something similar to this:
    image

  • To increase readability of long lines of text, please modify body width on individual post pages to something closer to that on the Filecoin blog. This probably means modifying the header width on individual post pages so it doesn't look significantly wider than the body — suggestions welcome on this, but something along this might work (note enlarging hero image to make it feel a little more balanced):
    image

  • On individual post pages at mobile widths, please add a bit more horizontal margin to the post body area - this looks a little too tight:
    image

  • Also on individual post pages at mobile widths, please tidy up the chicklets and share links so they don't share a div or word-wrap within chicklets:
    image

  • Please remove the breadcrumb from the cards page; on individual post pages, add a small subheader for "Blog & news" as in the following:
    image

  • When links are on a dark blue background, please use #6bc4ce instead of the existing link color.

  • Please make visual modifications to the language picker as described in #47.

  • On all pages, please change page background to #f1f3f2; on card pages, make cards all white for better card visibility (no need for shadow now). Please don't rip out any of the logic behind identifying blog posts, though; I still suspect we will still need to differentiate these somehow, but let's see what happens in user testing.

  • On cards page, now that background is in color, please remove outlines from form fields:
    image

  • On cards page, please change highlight color to #9ad4db instead of current pink

  • In search filter, please add single quotes around "enter" in Press 'enter' to select

  • On cards, please rearrange content elements as such:
    image

  • Also based on the mockup immediately above, please make all chicklets gray and highlight them with ipfs-css charcoal-muted on hover.

  • However, please apply this visual treatment for blog post chicklets to make them "special" (sorry this is in a different mockup!)
    image

  • On cards, please display full card title when hovering on card title (as alt text) so that titles truncated with ellipses can be read in full

  • The blueGreen color value used in text links and button backgrounds should be #34797D (understood that isn't in the main ipfs-css set, but teal is not quite WCAG-compliant on the new background noted above).

  • On individual blog post pages, please add the same corner radius to the hero image as there is on the cards themselves.

  • On individual blog post pages, please de-emphasize tag chicklets by using a lighter background (ipfs-css gray-muted might work out of the box):
    image

  • Please add visual formatting for code blocks as described in #33 - inline code display is already OK, but still need to match visual formatting for multi-line blocks of code.

Remove post author avatar code

We'll never use post author avatars, and they're taking up build time with all the errors. Please remove that logic. 🙏

Images should be stored in this repo

We're currently hotlinking to github. Instead, they should be stored in the static directory and served out of IPFS with the rest of the blog.

Add visual differentiation between blog post cards and other cards

In the original IA wireframes we'd used size to differentiate between blog post cards (the most important) and other types of cards, but masonry layouts are awkward to build in a bulletproof way and it didn't test great with users either.

Investigate a way to visually differentiate between blog post cards and other types of cards at a glance (most likely background color as a starting point). Bonus points for having an affordance for being able to tell between different types of "other types of cards" - i.e. to be able to spot all the news links or tutorials.

Standardize language picker display

This issue is to bring the visual display of the language picker a little more closely into line with the one on the Filecoin blog at https://filecoin.io/blog/#posts:

  • Note it can't be a 1:1 match since the entire site isn't translated -- so rather than display in nav, let's keep displaying in the main page header area
  • The below is a rough mockup, but gives an idea about smaller font size, change in wording, and tighter bottom margin:
    image

Tidy up font hierarchy/styles

Current status:

  • We have font hierarchy and styles carried over from the PL blog, which don't make so much sense in this context (our posts are longer, more complex, contain more code)
  • Font set isn't consistent with ipfs-css (i.e. Montserrat headlines, Inter text)
  • Looks like there are also some overrides that happened somewhere along the way; we should resolve those per @cwaring against https://github.com/tailwindlabs/tailwindcss-typography (which is already installed?) (moving this into #51)

Let's use this issue to tidy up the font hierarchy and styling overall. Can separate out any highly specific or detailed items into their own issues.

Initial review notes, 18 Dec

Hi @Ricardo-Silva91 -- wanted to do as much review as I could so you had some stuff to think about when you came back from your holidays! We will probably need to do a really detailed review once you're closer to done, but here are some first questions/requests. Also added #5 with some minor text/CSS edits that were just quicker to address that way ... please feel free to correct any poor code on my part 😊

Thank you so much! This looks awesome and it's so exciting to see it closer to real.

Site-wide: general

  • Some stuff needs tweaking for mobile widths, but I think you're already aware of that:

    • Individual blog page headers
    • Main page introductory and search info
    • Footer content
  • Please make the favicon an IPFS cube instead of the PL logo 😊 ... can we also please make this tab title "Home | IPFS Blog & News"?
    image

Main page: general

  • Is it possible for search/sort result views to be reflected in the URL, so a user could share a search?
  • It doesn't look like cards appear in reverse-date order across all content types. Can this please be the case?
  • On the main page, if we're displaying cards as a grid rather than masonry, we should make them all the same height. Please make max-height the equivalent to (3 lines title + author/date + 1 row tags + 5 lines teaser text).
  • We may want to make the breakpoint to go down from 3-cards wide to 2-cards a bigger number; they look cramped at tablet width. Might be worth seeing how this looks with uniform card heights first, though - your ideas?

Main page: introductory text and search info

  • In the introductory text at the top of the main page, please make all these icons slightly bigger (to match wireframe), all the same size, and the same color/color hover as page buttons:
    image
  • RSS isn't implemented yet - just confirming that's on our radar?
  • There's still some weird behavior in the search as a whole, but I don't want to dig too deep until you're done ironing the known bugs out 😊
  • Please make text "Search for words or #tags" the same size as "All content" here:
    image
  • In the search results box, border-opacity-10 isn't working for some reason. Do you mind a look? In any case, the border should be the same color as the borders above it for the dropdowns, but slightly wider.
    image
  • In the search results box, can you please make the following modifications? Example screenshot below.
    • Can tags in the search results info look visually the same as in the search field above them (darker teal, white text, "x" on right - but not the smaller font)?
    • Can tags in the search results please have the # text in them?
    • If 0 results, please add s to result
      image

Main page: individualcards

  • For author names on cards ...

    • Please remove the profile images (I know this is inconsistent with the PL blog)
    • This might mean you need to add some vertical margin to the line with the author name to make it not look crowded
    • Please make author names clickable, to result in a search view for all items by author.
    • This would mean that for content with multiple authors, it would be multiple clickable authors rather than one author of "John Smith and Jane Doe".
    • Please note that blog posts are the only types of content that should have authors.
  • Please make tag chicklets with dashes etc not word-break, and please wrap the chicklet div as a whole to multiple lines if need be:
    image

  • Please add # to chicklets for tags, and please add a first chicklet for all cards with that card's content type (no #, clickable to a drilldown of all items of that content type). (see wireframe screenshot below)
    image

  • Please make titles that are longer than 3 lines truncate with ellipses:
    image

  • On cards, can we please make the "Lorem ipsum" for blog pages just pull the first 5 lines of the blog body, truncated with an ellipses? (see notes above about standard height for what might dictate how many characters)
    image

  • For blog and news links that don't have a hero image, can we please steal this one from the existing blog? https://blog.ipfs.io/header_images/blog-placeholder.png

Main page: footer

  • In the footer newsletter signup, please make the "please send me..." text span the full width of the button/field combo above it:
    image

  • For the newsletter example, could we please make this link to the most recent post tagged weekly so it's always up to date?
    image

Individual blog pages

  • On individual blog pages, can we please have tags preceded by # and have them be the same teal color with white text as in the search drilldown on the main page?
    image

  • On individual blog pages, can links/link hovers be the same color as elsewhere?

  • On individual blog pages, can the social icons please all be the same size, and have the same color/color hover as page buttons?

  • On individual blog pages, can the social icons link to the appropriate social service as a page share?

  • On individual blog pages, can you please remove the author image, and make each author's name clickable to a search as described above for the main page?

Note

One last note about the lazy-load on the main page to follow up on our conversation from the other day: We're not concerned about the footer being difficult to reach in lazy-load mode, except for the newsletter signup material - because that's linked to from the introductory text on the main page. Is it possible to make sure that a user who clicks the newsletter signup link in that introductory text, while in lazy-load mode, actually gets to the newsletter signup section of the footer?

Blog posts: long code strings break margins

As illustrated in the /2020-06-26-go-ipfs-0-6-0/ blog post, long code strings will break out of margins:

image

IPFS CIDs will always cause this problem, so please have these scroll horizontally in their own div (or similar solution).

Move translation toggle to inside the post pages

Remove translation toggle from listing page and set a link at the top of the content of multilanguage page to the other translations.

  • remove LanguageSelector component from Blog
  • add forestry frontmatter field for alternative languages (maybe try a array with a dropdown selector if possible 🤔)
  • in BlogPost check frontmatter for alternativer languages and add new version of LanguageSelector before Content.

Add performance instrumentation to ongoing metrics

Per @atopal request, we need to add some form of site performance instrumentation to (at minimum) the primary IPFS websites going forward:

  • New blog.ipfs.io
  • Existing blog.ipfs.io (this may simply be some sort of baseline measurement, considering we are so close to relaunch)
  • Existing ipfs.io (for comparison purposes)
  • Replatformed ipfs.io
  • docs.ipfs.io

Kicking this work off in this repo, since we're already doing a lot of pre-launch work on the blog.

@zebateira: Can you please research potential approaches? Some notes:

  • @atopal is partial to SpeedCurve, but it's a commercial service with whom we don't currently have an account, so we should evaluate the larger landscape
  • This is likely to scale to all PL websites, so a larger scope may be a cost consideration if we utilize a commercial service
  • Data would be repurposed in our reporting dashboards, so bonus points for a programmatic way of getting it into Observable

@atopal: Please edit this comment or add additional comments for any other specs or notes. I'm tentatively labeling this as P2, on the assumption that it's acceptable to work on this post-blog-launch as long as payload problems in #41 are resolved for launch — but please revise if you feel this is needed sooner.

cc @terichadbourne @johnnymatthews @yusefnapora @johndmulhausen for context and/or discussion.

Add image cropping on upload in Forestry UI

One major pain point in the old blog is that images don't scale/crop in elegant ways, leading to awkward display like https://ipfsblog-vuepress.netlify.app/_099-identity-ipfs-ion/. Would prefer not to crop automatically so we don't see things like that example, but this probably means two things:

  • Keep the same aspect ratio for the card and for the hero image
  • Allow the user to reposition/crop the photo to fit that aspect ratio at the time of upload from within the Forestry form interface

Originally discussed in #6 (comment).

Auto-link github handles

It would be awesome if GitHub @ mentions were auto-linked to GitHub profiles in blog posts. I'm hoping there's an existing plugin but there likely isn't.

Not responsive on Firefox (mobile browser, resizing works)

On Firefox mobile, the website is responsive momentarily, but then it switches to "desktop" mode.
You reproduce this on the desktop only if you use the mobile device option on the dev tools.

screen-20210401-160046.mp4

@jessicaschilling do we have any percentage on the number of mobile firefox users on the currently deployed ipfs blog?
That would help drive the decision to wait for this to be fixed before launch or not if the number of users are really small.
In any case we can investigate what is the issue now.

Add Countly analytics

The org is standardizing on use of a private instance of Countly for site analytics (rather than old blog's use of Google Analytics). @cwaring indicates that we'll need to write a manual analytics plugin to add countly integration.

Set up Fleek/Forestry staging and deploy flow

Confirmed with @andyschwab that the plan is to deploy the new blog via Fleek rather than our own cluster. Next steps on this are as follows ...

  • @jdiogopeixoto, can you please set up a free Fleek account for deploying this repo? (Unfortunately, Fleek's permissioning isn't granular enough at the moment for me to be able to add you to the PL Fleek without giving you admin access to ALL PL sites, sigh.)
  • We'll need to set it up with main as the production branch, but I believe also to build deploy previews for all pull requests so we can preview other branches (see below).
  • Please set up Forestry to write to a new staging branch instead of main — I think that Fleek will still build deploy previews for changes made to staging, but we will need to confirm. (This staging vs main is the methodology currently being used for the Filecoin blog, so we want to be consistent.)

Once we confirm the above works (main successfully deployed via Fleek, plus updates to staging being visible to blog post authors), will need to do the following:

  • Move Fleek config over to PL Fleek account (could use .fleek.json config method)
  • Remove existing Netlify deploy workflow (I believe @andyschwab has access to this; I don't)

Tags have an incorrect behavior

Tags are not working correctly:

  • When clicking on a tag inside a card it always adds the tag to the filter and removes the existing ones
  • When removing a tag from the results it doesn't update the multiselect
  • When clicking on a tag inside a blog post with multiple tags then going back to the blog post (using the browser back button) and clicking on a different one isn't setting the filter correctly

Make the search area responsive

The search area is not responsive, we need to change it. There are also some margins inside the top text that make it not being aligned, we can improve that.

image

Add how-to guidance for content creators

As we get closer to site launch and get more open questions closed, we'll need to add how-to guidance for content creators (both core team and external contributors). This issue is a holding place for storing those:

  • Update top-level README.md with VuePress-specific info deferring into issue #22 for bulk of work, but will trim down readme in the interim to avoid confusion

  • Make canonical tags list easily accessible: in repo readme and in Forestry edit pages

  • Add explanatory notes in Forestry edit pages wherever appropriate, particularly for image naming guidance (see #10 (comment) for context)
    image

  • Remind post authors that header art shouldn't have too many words, to avoid conflicting with card titles

  • Reword image-crop instructions

Make footer responsive

Please check and modify as needed all breakpoints for the footer for awkward visuals, particularly the newsletter entry div:
image

Investigate Forestry permissioning: Draft posts and reader-submitted links

Investigate Forestry permissioning overall and how we will need to solve for three problems:

  • How to draft blog posts in a staging environment without any danger of accidentally committing to main prior to approval
  • How approval workflow for draft posts should work
  • The best way for readers to submit links (news, tutorials, etc): can this be done within Forestry or will we need to create something to automatically generate a PR using a third-party form tool?

perf: minimize application preload payload

Currently the blog index is loading over 5.2mb of JS which is blocking the site rendering for nearly 10s. This payload needs to be significantly reduced to meet performance standards and introduce async lazy loading for additional page meta.

2021-01-27 at 16 26 35

related: #40 #30

Troubleshoot why Discourse comments don't appear on Fleek previews

Simply adding our two Fleek subdomains to Discourse's "Allowed Hosts" for embeds should "just work" — as it has for the old Netlify deploy as well as our existing production site hosted on our IPFS cluster ... unfortunately that seems not to be the case. Can you please investigate? 🙏

image

Fix image centering (by css or by docs)

Right now, inline images on posts are not centered.

We should either center via site-wide CSS or add docs for consistent and best practice centering.

Then update all posts that might have either post-specific centering CSS.

Remove paths for link type markdown files from sitemap

VuePress generates a page/path for each markdown file and all those paths generated are being added to the sitemap.
For the markdown files that we are using to link videos, tutorials, etc... we don't want them being added to the sitemap - because those paths shouldn't exist.

So the work here would be to remove those paths from the sitemap and, if possible, remove them from being generated at all.

fix: ensure SSR is enabled for the index page

Currently the index page is not accessible without Javascript enabled removing all the SEO and performance benefits of using VuePress to render the application.

This is a blocker for migrating to production.

ipfs-blog netlify app_

Are separate directories for each blog post necessary?

As I understand it, the use of a separate directory for each blog post in the original site was to accommodate Hugo's limitations as a platform. Furthermore, if we store all images in a single public directory as discussed in #13 (and name images accordingly), there doesn't seem to be a need for a separate directory for each post at all:

  • not useful for keeping images organized
  • no impact on the URL structure, since that's specified in each post's frontmatter

Two requests for this issue:

  1. Can others confirm whether my statements above are correct?
  2. If so, can we please bulk-move existing blog posts out of their individual folders?

Add public-facing Forestry form for submitting a new link

Members of the public will be encouraged to submit links for all content types except blog posts. To achieve that, we'll need a form with the following fields:

  • Link
  • Title
  • Date (auto-filled to current date)
  • Card image (optional)
  • Tags (optional)
  • Short description (optional)
    The result should be a PR that a core team member can modify and/or merge.

When this is done, add a link to the form at the top of the main blog page as indicated in the wireframe.

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.