Playground for experimenting on an Astro version of Visual Voyager based on the following:
- impulse template, converted to Astro
- unocss
- Visual Voyager Experimental Site with Authentication
If you want to get started locally, you can clone the project, install the dependencies and run the dev command!
git clone https://github.com/ChristineTham/vv-auth/
cd vv-auth
pnpm install
pnpm run dev
You can then open up http://localhost:3000 with your browser to see the result! Open up pages/index.astro
and modify the code to see the changes auto update as you save.
π§ Just a heads up, you will not be able to see the function data or redirect output until you run locally with
netlify dev
(info below in Netlify CLI section)
When using this template, you might want to see Netlify features such as redirects, functions, or preview the deploy locally first. To do, this you can install and use the Netlify CLI!
pnpm install -g netlify-cli # to install the Netlify CLI tool globally
netlify dev
And now your project should be running on http://localhost:8888.
-
Clone this repo with one of these options:
- Click the 'Use this template' button at the top of the page
- Or via the command line
git clone https://github.com/ChristineTham/vv-auth
-
Then install the necessary packages and run the project locally to make sure everything works.
pnpm install pnpm run dev
Alternatively, you can run this locally with the Netlify CLI's by running the
netlify dev
command for more options like receiving a live preview to share (netlify dev --live
) and the ability to test Netlify Functions and redirects.
-
Install the Netlify CLI globally
pnpm install netlify-cli -g
-
Run
pnpm run build
-
Then use the
netlify deploy
for a deploy preview link ornetlify deploy --prod
to deploy to production
Here are a few other ways you can deploy this template:
- Use the Netlify CLI's create from template command
netlify sites:create-template vv-auth
which will create a repo, Netlify project, and deploy it - If you want to utilize continuous deployment through GitHub webhooks, run the Netlify command
netlify init
to create a new project based on your repo ornetlify link
to connect your repo to an existing project
Netlify Forms are a way to wire up your native HTML into being able to seamlessly handle submissions. To get a form working, we need to add two extra things:
- An extra attribute on the
form
tag,netlify
Adding this attribute to our form
tag will let Netlify know when it loads the page, that it needs to be aware of submissions made through it.
- A hidden input in the form,
<input type="hidden" name="form-name" value="feedback" />
Adding this extra input allows our form to be given a name that Netlify can store submissions to. It is a hidden input so your users won't see it but it will pass along the name of our form to Netlify when we submit. In our Netlify Admins site under Forms, we will see our Active Form named feedback
and all submissions will go there.
With both of those we're ready for folks to give us feedback!
While Netlify provides a default submission page for folks, we can customize it as well! With the action
attribute on the form
tag we will be able to direct our users to our own page.
In components/FeedbackForm.js
you'll see the form has the attribute action="/success"
this will take our user to the custom route /success
which we created under pages/success.js
. As long as the page exists, you can direct folks to it!
Many bots scan through webpages and try to see what pages and forms they can get access to. Instead of letting our website receive spam submissions, we can filter out unrelated submissions with a visually-hidden input field.
<p class="hidden">
<label>
Donβt fill this out if youβre human: <input name="bot-field" />
</label>
</p>
Since screenreader users will still have this announced, it is important for us to communicate that this is a field not meant to be filled in.
For this to work we also need to add a netlify-honeypot
attribute to the form element.
<form netlify data-netlify-honeypot="bot-field" name="feedback method="POST" action="/success"></form>
See it here in the template code.
- Netlify Forms Setup
- Netlify Forms
- Netlify Forms - Form Triggered Functions
- Netlify Forms - Using reCAPTCHA 2
With Netlify, you can build out server-side code without having to setup and maintain a dedicated server. Inside of our default folder path, netlify/functions
you can see an example of the format for JavaScript functions with the joke.js
file.
The function format expects an async
function named handler
to be exported.*
export const handler = async () => {
// Your code goes in here!
}
- Note: ESLint may report that the async is unnecessary if there is no
await
code within the function, but theasync
is required. Do not delete it.
This will be the function that will be invoked whenever a client makes a request to the generated endpoints. The endpoint's format is followed as /.netlify/functions/joke
. So whenever the site is deployed, if you go to https://<site base url>/.netlify/functions/joke
you will see a random joke!
Side note: In our example, we're using
import
to include data from another location andexport const const handler
to let our function be consumed by Netlify. We're able to do this because of esbuild. This is a bundler configuration we set in ournetlify.toml
under[functions]
.
There is quite a bit you can do with these functions, so here are some additional resources to learn more!
- Netlify Function Format
- Build Netlify Functions with TypeScript
- Event-triggered Functions
- What are Background Functions
- Netlify Functions - Examples
- Using esbuild as your bundler for new ECMAScript Features
In the netlify.toml
configuration file there is an example of how to implement redirects. Redirects can be used to do many things from redirecting Single Page Apps more predictably, redirecting based on country/language to leveraging On-Demand Builders for Distributed Persistant Rendering.
In the example we'll be using redirects to have a shorter endpoint to Netlify functions. By default, you call a Netlify function when requesting a path like https://yoursite.netlify.com/.netlify/functions/functionName
. Instead, we'll redirect all calls from a path including /api
to call on the Netlify functions. So the path will be https://yoursite.netlify.com/api/functionName
, a lot easier to remember too.
[[redirects]]
from = "/api/*"
to = "/.netlify/functions/:splat"
status = 200
force = true
First, we create a section in the .toml
for the redirect using [[redirects]]
. Each redirect should have this line to start the redirect code, and the redirects will be executed in the order they appear in the .toml
from top to bottom.
The bare minimum needed is the from
and to
, letting the CDN know when a route is requested, the from
, forward it on to another path, the to
. In the example, we also added an 'Ok' status code, 200, and set the force
to true to make sure it always redirects from the from
path.
There are many ways to use redirects. Check out the resouces below to learn more.
- Redirect syntax and configuration
- Redirect options
- Creating better, more predicatable redirect rules for SPAs
- Redirect by country or language
- On-Demand Builders
Here are some resources to help you on your Astro + Netlify coding fun!
Hope this template helps :) Happy coding π©π»βπ»!
Inside the project, you'll see the following folders and files:
/
βββ public/
β βββ favicon.ico
βββ src/
| βββ config.ts
β βββ assets/
β β βββ image.jpg
β βββ components/
β β βββ navbar.astro
β βββ content/
β β βββ config.ts
| β βββ blog/
| β | βββ post.md
| β βββ category/
| β βββ category.md
β βββ layouts/
β β βββ default.astro
β βββ pages/
β βββ about.md
β βββ index.astro
βββ astro.config.cjs
βββ package.json
βββ uno.config.ts
All commands are run from the root of the project, from a terminal:
Command | Action |
---|---|
pnpm install |
Installs dependencies |
pnpm run dev |
Starts local dev server at localhost:3000 |
pnpm run build |
Build your production site to ./dist/ |
pnpm run preview |
Preview your build locally, before deploying |