Skip to content

Commit b04f884

Browse files
committed
🎉 Project structure and initial Sanity schemas
1 parent a64c071 commit b04f884

23 files changed

+8325
-1427
lines changed

Diff for: .env.example

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
NEXT_PUBLIC_SANITY_PROJECT_ID="NEXT_PUBLIC_SANITY_PROJECT_ID"
2+
NEXT_PUBLIC_SANITY_DATASET="development"

Diff for: README.md

+1-36
Original file line numberDiff line numberDiff line change
@@ -1,36 +1 @@
1-
This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app).
2-
3-
## Getting Started
4-
5-
First, run the development server:
6-
7-
```bash
8-
npm run dev
9-
# or
10-
yarn dev
11-
# or
12-
pnpm dev
13-
# or
14-
bun dev
15-
```
16-
17-
Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
18-
19-
You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.
20-
21-
This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel.
22-
23-
## Learn More
24-
25-
To learn more about Next.js, take a look at the following resources:
26-
27-
- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
28-
- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
29-
30-
You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome!
31-
32-
## Deploy on Vercel
33-
34-
The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
35-
36-
Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details.
1+
# Portfolio

Diff for: package.json

+9-4
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,24 @@
99
"lint": "next lint"
1010
},
1111
"dependencies": {
12+
"@sanity/image-url": "1",
13+
"@sanity/vision": "3",
14+
"next": "14.2.15",
15+
"next-sanity": "9",
1216
"react": "^18",
1317
"react-dom": "^18",
14-
"next": "14.2.15"
18+
"sanity": "3",
19+
"styled-components": "6"
1520
},
1621
"devDependencies": {
17-
"typescript": "^5",
1822
"@types/node": "^20",
1923
"@types/react": "^18",
2024
"@types/react-dom": "^18",
25+
"eslint": "^8",
26+
"eslint-config-next": "14.2.15",
2127
"postcss": "^8",
2228
"tailwindcss": "^3.4.1",
23-
"eslint": "^8",
24-
"eslint-config-next": "14.2.15"
29+
"typescript": "^5"
2530
},
2631
"packageManager": "[email protected]+sha512.e5a7e52a4183a02d5931057f7a0dbff9d5e9ce3161e33fa68ae392125b79282a8a8a470a51dfc8a0ed86221442eb2fb57019b0990ed24fab519bf0e1bc5ccfc4"
2732
}

Diff for: pnpm-lock.yaml

+8,023-1,238
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: sanity.cli.ts

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
/**
2+
* This configuration file lets you run `$ sanity [command]` in this folder
3+
* Go to https://www.sanity.io/docs/cli to learn more.
4+
**/
5+
import { defineCliConfig } from 'sanity/cli'
6+
7+
const projectId = process.env.NEXT_PUBLIC_SANITY_PROJECT_ID
8+
const dataset = process.env.NEXT_PUBLIC_SANITY_DATASET
9+
10+
export default defineCliConfig({ api: { projectId, dataset } })

Diff for: sanity.config.ts

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
'use client'
2+
3+
/**
4+
* This configuration is used to for the Sanity Studio that’s mounted on the `/app/studio/[[...tool]]/page.tsx` route
5+
*/
6+
7+
import {visionTool} from '@sanity/vision'
8+
import {defineConfig} from 'sanity'
9+
import {structureTool} from 'sanity/structure'
10+
11+
// Go to https://www.sanity.io/docs/api-versioning to learn how API versioning works
12+
import {apiVersion, dataset, projectId} from './src/sanity/env'
13+
import {schema} from './src/sanity/schemaTypes'
14+
import {structure} from './src/sanity/structure'
15+
16+
export default defineConfig({
17+
basePath: '/studio',
18+
projectId,
19+
dataset,
20+
// Add and edit the content schema in the './sanity/schemaTypes' folder
21+
schema,
22+
plugins: [
23+
structureTool({structure}),
24+
// Vision is for querying with GROQ from inside the Studio
25+
// https://www.sanity.io/docs/the-vision-plugin
26+
visionTool({defaultApiVersion: apiVersion}),
27+
],
28+
})

Diff for: src/app/fonts/GeistMonoVF.woff

-66.3 KB
Binary file not shown.

Diff for: src/app/fonts/GeistVF.woff

-64.7 KB
Binary file not shown.

Diff for: src/app/globals.css

+1-25
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,3 @@
11
@tailwind base;
22
@tailwind components;
3-
@tailwind utilities;
4-
5-
:root {
6-
--background: #ffffff;
7-
--foreground: #171717;
8-
}
9-
10-
@media (prefers-color-scheme: dark) {
11-
:root {
12-
--background: #0a0a0a;
13-
--foreground: #ededed;
14-
}
15-
}
16-
17-
body {
18-
color: var(--foreground);
19-
background: var(--background);
20-
font-family: Arial, Helvetica, sans-serif;
21-
}
22-
23-
@layer utilities {
24-
.text-balance {
25-
text-wrap: balance;
26-
}
27-
}
3+
@tailwind utilities;

Diff for: src/app/layout.tsx

+7-19
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,9 @@
11
import type { Metadata } from "next";
2-
import localFont from "next/font/local";
32
import "./globals.css";
43

5-
const geistSans = localFont({
6-
src: "./fonts/GeistVF.woff",
7-
variable: "--font-geist-sans",
8-
weight: "100 900",
9-
});
10-
const geistMono = localFont({
11-
src: "./fonts/GeistMonoVF.woff",
12-
variable: "--font-geist-mono",
13-
weight: "100 900",
14-
});
15-
164
export const metadata: Metadata = {
17-
title: "Create Next App",
18-
description: "Generated by create next app",
5+
title: "Artur Poffo | Portfólio",
6+
description: "Portfólio do desenvolvedor Artur Poffo",
197
};
208

219
export default function RootLayout({
@@ -24,11 +12,11 @@ export default function RootLayout({
2412
children: React.ReactNode;
2513
}>) {
2614
return (
27-
<html lang="en">
28-
<body
29-
className={`${geistSans.variable} ${geistMono.variable} antialiased`}
30-
>
31-
{children}
15+
<html lang="pt-BR">
16+
<body>
17+
<main className="w-full min-h-screen bg-slate-900 text-slate-300 antialiased">
18+
{children}
19+
</main>
3220
</body>
3321
</html>
3422
);

Diff for: src/app/page.tsx

+2-96
Original file line numberDiff line numberDiff line change
@@ -1,101 +1,7 @@
1-
import Image from "next/image";
2-
31
export default function Home() {
42
return (
5-
<div className="grid grid-rows-[20px_1fr_20px] items-center justify-items-center min-h-screen p-8 pb-20 gap-16 sm:p-20 font-[family-name:var(--font-geist-sans)]">
6-
<main className="flex flex-col gap-8 row-start-2 items-center sm:items-start">
7-
<Image
8-
className="dark:invert"
9-
src="https://nextjs.org/icons/next.svg"
10-
alt="Next.js logo"
11-
width={180}
12-
height={38}
13-
priority
14-
/>
15-
<ol className="list-inside list-decimal text-sm text-center sm:text-left font-[family-name:var(--font-geist-mono)]">
16-
<li className="mb-2">
17-
Get started by editing{" "}
18-
<code className="bg-black/[.05] dark:bg-white/[.06] px-1 py-0.5 rounded font-semibold">
19-
src/app/page.tsx
20-
</code>
21-
.
22-
</li>
23-
<li>Save and see your changes instantly.</li>
24-
</ol>
25-
26-
<div className="flex gap-4 items-center flex-col sm:flex-row">
27-
<a
28-
className="rounded-full border border-solid border-transparent transition-colors flex items-center justify-center bg-foreground text-background gap-2 hover:bg-[#383838] dark:hover:bg-[#ccc] text-sm sm:text-base h-10 sm:h-12 px-4 sm:px-5"
29-
href="https://vercel.com/new?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
30-
target="_blank"
31-
rel="noopener noreferrer"
32-
>
33-
<Image
34-
className="dark:invert"
35-
src="https://nextjs.org/icons/vercel.svg"
36-
alt="Vercel logomark"
37-
width={20}
38-
height={20}
39-
/>
40-
Deploy now
41-
</a>
42-
<a
43-
className="rounded-full border border-solid border-black/[.08] dark:border-white/[.145] transition-colors flex items-center justify-center hover:bg-[#f2f2f2] dark:hover:bg-[#1a1a1a] hover:border-transparent text-sm sm:text-base h-10 sm:h-12 px-4 sm:px-5 sm:min-w-44"
44-
href="https://nextjs.org/docs?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
45-
target="_blank"
46-
rel="noopener noreferrer"
47-
>
48-
Read our docs
49-
</a>
50-
</div>
51-
</main>
52-
<footer className="row-start-3 flex gap-6 flex-wrap items-center justify-center">
53-
<a
54-
className="flex items-center gap-2 hover:underline hover:underline-offset-4"
55-
href="https://nextjs.org/learn?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
56-
target="_blank"
57-
rel="noopener noreferrer"
58-
>
59-
<Image
60-
aria-hidden
61-
src="https://nextjs.org/icons/file.svg"
62-
alt="File icon"
63-
width={16}
64-
height={16}
65-
/>
66-
Learn
67-
</a>
68-
<a
69-
className="flex items-center gap-2 hover:underline hover:underline-offset-4"
70-
href="https://vercel.com/templates?framework=next.js&utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
71-
target="_blank"
72-
rel="noopener noreferrer"
73-
>
74-
<Image
75-
aria-hidden
76-
src="https://nextjs.org/icons/window.svg"
77-
alt="Window icon"
78-
width={16}
79-
height={16}
80-
/>
81-
Examples
82-
</a>
83-
<a
84-
className="flex items-center gap-2 hover:underline hover:underline-offset-4"
85-
href="https://nextjs.org?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
86-
target="_blank"
87-
rel="noopener noreferrer"
88-
>
89-
<Image
90-
aria-hidden
91-
src="https://nextjs.org/icons/globe.svg"
92-
alt="Globe icon"
93-
width={16}
94-
height={16}
95-
/>
96-
Go to nextjs.org →
97-
</a>
98-
</footer>
3+
<div>
4+
<h1>Olá, eu sou o Artur Poffo</h1>
995
</div>
1006
);
1017
}

Diff for: src/app/studio/[[...tool]]/page.tsx

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
/**
2+
* This route is responsible for the built-in authoring environment using Sanity Studio.
3+
* All routes under your studio path is handled by this file using Next.js' catch-all routes:
4+
* https://nextjs.org/docs/routing/dynamic-routes#catch-all-routes
5+
*
6+
* You can learn more about the next-sanity package here:
7+
* https://github.com/sanity-io/next-sanity
8+
*/
9+
10+
import { NextStudio } from 'next-sanity/studio'
11+
import config from '../../../../sanity.config'
12+
13+
export const dynamic = 'force-static'
14+
15+
export { metadata, viewport } from 'next-sanity/studio'
16+
17+
export default function StudioPage() {
18+
return <NextStudio config={config} />
19+
}

Diff for: src/sanity/env.ts

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
export const apiVersion =
2+
process.env.NEXT_PUBLIC_SANITY_API_VERSION || '2024-10-13'
3+
4+
export const dataset = assertValue(
5+
process.env.NEXT_PUBLIC_SANITY_DATASET,
6+
'Missing environment variable: NEXT_PUBLIC_SANITY_DATASET'
7+
)
8+
9+
export const projectId = assertValue(
10+
process.env.NEXT_PUBLIC_SANITY_PROJECT_ID,
11+
'Missing environment variable: NEXT_PUBLIC_SANITY_PROJECT_ID'
12+
)
13+
14+
function assertValue<T>(v: T | undefined, errorMessage: string): T {
15+
if (v === undefined) {
16+
throw new Error(errorMessage)
17+
}
18+
19+
return v
20+
}

Diff for: src/sanity/lib/client.ts

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { createClient } from 'next-sanity'
2+
3+
import { apiVersion, dataset, projectId } from '../env'
4+
5+
export const client = createClient({
6+
projectId,
7+
dataset,
8+
apiVersion,
9+
useCdn: true, // Set to false if statically generating pages, using ISR or tag-based revalidation
10+
})

Diff for: src/sanity/lib/image.ts

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import createImageUrlBuilder from '@sanity/image-url'
2+
import { SanityImageSource } from "@sanity/image-url/lib/types/types";
3+
4+
import { dataset, projectId } from '../env'
5+
6+
// https://www.sanity.io/docs/image-url
7+
const builder = createImageUrlBuilder({ projectId, dataset })
8+
9+
export const urlFor = (source: SanityImageSource) => {
10+
return builder.image(source)
11+
}

Diff for: src/sanity/schemaTypes/index.ts

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { type SchemaTypeDefinition } from 'sanity'
2+
import { ownerInfoType } from './ownerInfo'
3+
import { skillType } from './skill'
4+
import { projectType } from './project'
5+
import { resourceGroupType } from './resourceGroup'
6+
7+
export const schema: { types: SchemaTypeDefinition[] } = {
8+
types: [
9+
ownerInfoType,
10+
projectType,
11+
skillType,
12+
resourceGroupType,
13+
],
14+
}

0 commit comments

Comments
 (0)