├── .eslintrc.json ├── .gitignore ├── LICENSE ├── README.md ├── components ├── 1-psn.js ├── 2-up-button.js ├── 2-up-no-button.js ├── 4-psn.js ├── 4-up.js ├── avatar.js ├── blog-4-home.js ├── contact-form.js ├── container.js ├── date-formatter.js ├── footer.js ├── header.js ├── jumbotron.js ├── layout.js ├── main-gallery.js ├── media-block.js ├── meta.js ├── nav.js ├── newsletter-form.js ├── post-block.js ├── pricing-block-only.js ├── pricing.js ├── section-separator.js ├── short-text.js ├── social-icon.js ├── testimonials.js └── text-and-image.js ├── content ├── .keep ├── _index.md ├── post │ └── brewing-chemex.md ├── services │ └── _index.md ├── team │ └── _index.md └── tech.md ├── data └── meta.json ├── lib ├── api.js ├── constants.js └── markdownToHtml.js ├── package-lock.json ├── package.json ├── pages ├── 404.js ├── _app.js ├── _document.js ├── index.js ├── posts │ └── [slug].js ├── services.js └── team.js ├── postcss.config.js ├── public ├── favicon │ ├── android-chrome-192x192.png │ ├── android-chrome-512x512.png │ ├── apple-touch-icon.png │ ├── browserconfig.xml │ ├── favicon-16x16.png │ ├── favicon-32x32.png │ ├── favicon.ico │ ├── mstile-150x150.png │ ├── safari-pinned-tab.svg │ └── site.webmanifest ├── img │ ├── android-chrome-192x192.png │ ├── android-chrome-512x512.png │ ├── apple-touch-icon.png │ ├── diego.jpeg │ ├── favicon-16x16.png │ ├── favicon-32x32.png │ ├── favicon.ico │ ├── global-preloader.jpg │ ├── home-jumbotron.jpg │ ├── icon.svg │ ├── icons-facebook.svg │ ├── icons-instagram.svg │ ├── icons-twitter.svg │ ├── icons-vimeo.svg │ ├── logo.svg │ ├── mstile-144x144.png │ ├── mstile-150x150.png │ ├── mstile-310x150.png │ ├── mstile-310x310.png │ ├── mstile-70x70.png │ ├── og-image.jpg │ ├── safari-pinned-tab.svg │ └── services-jumbotron.jpg └── pimg │ ├── progressive-image.css │ ├── progressive-image.js │ └── progressive-image.min.js └── styles ├── imports ├── _background-position.css ├── _background-size.css ├── _border-colors.css ├── _border-radius.css ├── _border-style.css ├── _border-widths.css ├── _borders.css ├── _box-sizing.css ├── _buttons.css ├── _clears.css ├── _cms.css ├── _code.css ├── _colors.css ├── _coordinates.css ├── _debug-children.css ├── _debug-grid.css ├── _debug.css ├── _display.css ├── _flexbox.css ├── _floats.css ├── _font-style.css ├── _font-weight.css ├── _forms.css ├── _heights.css ├── _images.css ├── _line-height.css ├── _links.css ├── _lists.css ├── _max-widths.css ├── _media-queries.css ├── _opacity.css ├── _outlines.css ├── _overflow.css ├── _position.css ├── _reset.css ├── _spacing.css ├── _states.css ├── _styles.css ├── _svg.css ├── _tables.css ├── _text-align.css ├── _text-decoration.css ├── _text-transform.css ├── _type-scale.css ├── _typography.css ├── _utilities.css ├── _variables.css ├── _vertical-align.css ├── _visibility.css ├── _white-space.css ├── _widths.css ├── _word-break.css └── _z-index.css └── main.css /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "next/core-web-vitals", 3 | "rules": { 4 | "@next/next/no-sync-scripts": "off", 5 | "@next/next/no-html-link-for-pages": "off", 6 | "@next/next/no-img-element": "off", 7 | "jsx-a11y/alt-text": "off", 8 | "@next/next/no-css-tags": "off" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # next.js 12 | /.next/ 13 | /out/ 14 | 15 | # production 16 | /build 17 | 18 | # misc 19 | .DS_Store 20 | *.pem 21 | 22 | # debug 23 | npm-debug.log* 24 | yarn-debug.log* 25 | yarn-error.log* 26 | 27 | # local env files 28 | .env.local 29 | .env.development.local 30 | .env.test.local 31 | .env.production.local 32 | 33 | # vercel 34 | .vercel 35 | 36 | yarn.lock 37 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Gavin Johnson & Diego Lara 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # A small business website for Iron Detailing 2 | Iron Detailing is a mobile automotive detailing service based out or Los Angeles, CA. It serves Torrance, South Bay, and surrounding areas. 3 | 4 | You can preview this site at [irondetailing.netlify.app](https://irondetailing.netlify.app/). 5 | 6 | 7 | ## How to Use 8 | * Clone the repo and cd into its folder. 9 | * Run `npm install`. 10 | * To run rtdl's website locally in dev mode, run `npm run dev`. You can 11 | view the site at [http://localhost:3000/](http://localhost:3000/). 12 | * To build the website, run `npm run build` and it will output to the `.next` folder. 13 | 14 | 15 | ## License 🤝 16 | [MIT](./LICENSE) 17 | 18 | 19 | ## Appreciation 🙏 20 | * [next-dev-studio template](https://github.com/lwz7512/next-dev-studio) by [lwz7512](https://github.com/lwz7512) -------------------------------------------------------------------------------- /components/1-psn.js: -------------------------------------------------------------------------------- 1 | export default function OnePerson({heading, description, blurbs}) { 2 | return ( 3 |
4 |
5 |

{heading}

6 |

{description}

7 |
8 | { 9 | blurbs.map(p => ( 10 |
11 |
12 | person image 13 |
14 |
15 |

16 | {p.name} 17 |

18 |
19 |

{p.text}

20 |
21 |
22 |
23 | )) 24 | } 25 |
26 |
27 |
28 | ) 29 | } -------------------------------------------------------------------------------- /components/2-up-button.js: -------------------------------------------------------------------------------- 1 | import Link from 'next/link' 2 | 3 | export default function TwoUpButton({ intro, products }) { 4 | if(intro.text != null && intro.text != "") { 5 | return ( 6 |
7 |
8 |

{intro.heading}

9 |

{intro.text}

10 |
11 | { 12 | products.map(p => ( 13 |
14 |

{p.heading}

15 |

{p.text}

16 |
17 | )) 18 | } 19 |
20 |
21 | 22 | See all services 23 | 24 |
25 |
26 |
27 | ) 28 | } else { 29 | return ( 30 |
31 |
32 |

{intro.heading}

33 |
34 | { 35 | products.map(p => ( 36 |
37 |

{p.heading}

38 |

{p.text}

39 |
40 | )) 41 | } 42 |
43 |
44 | 45 | See all services 46 | 47 |
48 |
49 |
50 | ) 51 | } 52 | } -------------------------------------------------------------------------------- /components/2-up-no-button.js: -------------------------------------------------------------------------------- 1 | import Link from 'next/link' 2 | 3 | export default function TwoUpNoButton({ intro, products }) { 4 | if(intro.text != null && intro.text != "") { 5 | return ( 6 |
7 |
8 |

{intro.heading}

9 |

{intro.text}

10 |
11 | { 12 | products.map(p => ( 13 |
14 |

{p.heading}

15 |

{p.text}

16 |
17 | )) 18 | } 19 |
20 |
21 |
22 | ) 23 | } else { 24 | return ( 25 |
26 |
27 |

{intro.heading}

28 |
29 | { 30 | products.map(p => ( 31 |
32 |

{p.heading}

33 |

{p.text}

34 |
35 | )) 36 | } 37 |
38 |
39 |
40 | ) 41 | } 42 | } -------------------------------------------------------------------------------- /components/4-psn.js: -------------------------------------------------------------------------------- 1 | export default function FourPerson({heading, description, blurbs}) { 2 | return ( 3 |
4 |
5 |

{heading}

6 |

{description}

7 |
8 | { 9 | blurbs.map(p => ( 10 |
11 |
12 | person image 13 |
14 |
15 |

16 | {p.name} 17 |

18 |
19 |

{p.text}

20 |
21 |
22 |
23 | )) 24 | } 25 |
26 |
27 |
28 | ) 29 | } -------------------------------------------------------------------------------- /components/4-up.js: -------------------------------------------------------------------------------- 1 | export default function FourUp({ heading, description, blurbs }) { 2 | return ( 3 |
4 |
5 |

{heading}

6 |

{description}

7 |
8 | { 9 | blurbs.map(p => ( 10 |
11 |
12 | product image 13 |
14 |

{p.text}

15 |
16 | )) 17 | } 18 |
19 |
20 |
21 | ) 22 | } -------------------------------------------------------------------------------- /components/avatar.js: -------------------------------------------------------------------------------- 1 | export default function Avatar({ name, picture }) { 2 | return ( 3 |
4 | {name} 5 |
{name}
6 |
7 | ) 8 | } 9 | -------------------------------------------------------------------------------- /components/blog-4-home.js: -------------------------------------------------------------------------------- 1 | import Link from 'next/link' 2 | import PostBlock from './post-block' 3 | 4 | export default function Blog4Home({ posts }) { 5 | return ( 6 |
7 |
8 |

Latest stories

9 |
10 | { 11 | posts.map(p => ( 12 |
13 | 19 |
20 | )) 21 | } 22 |
23 |
24 | 25 | Read more 26 | 27 |
28 |
29 |
30 | ) 31 | } -------------------------------------------------------------------------------- /components/contact-form.js: -------------------------------------------------------------------------------- 1 | export default function ContactForm() { 2 | return ( 3 |
4 |

Drop us a line below

5 |
6 |
7 |
8 |
9 | 10 | 11 |
12 |
13 |
14 |
15 | 16 | 17 |
18 |
19 |
20 |
21 |