Skip to content

Commit 3f2e3f3

Browse files
committed
fix: changed psyone.xyz to psyone.dev
1 parent 10eb696 commit 3f2e3f3

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+365
-425
lines changed

.dockerignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,11 @@
99
**/.next
1010
**/.nuxt
1111
**/.output
12+
**/AGENTS.md
1213

1314
# Dev files
1415
.data
15-
.env*
16+
1617
.editorconfig
1718

1819
# CI/CD

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ dist
88
# Node dependencies
99
node_modules
1010

11+
.env.*
12+
13+
1114
# Logs
1215
logs
1316
*.log

AGENTS.md

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# Repository Guidelines
2+
3+
## Project Structure & Module Organization
4+
- `app/` holds the Nuxt application: UI pieces in `components/`, route shells in `pages/`, reusable logic in `composables/`, and shared styles/assets under `assets/`.
5+
- `content/` stores Markdown-driven sections surfaced via `@nuxt/content`; author new entries with front matter for titles and ordering.
6+
- `public/` exposes static files (favicons, manifest, social images) served verbatim.
7+
- `server/` contains API handlers, email templates, and route middleware; co-locate supporting utilities beside each handler.
8+
- Localization strings live in `i18n/`; update locale JSON/YAML in tandem with content changes.
9+
10+
## Build, Test, and Development Commands
11+
- `pnpm install` syncs dependencies (required after pulling lockfile updates).
12+
- `pnpm dev` runs the Nuxt dev server with HMR at the configured port.
13+
- `pnpm build` produces the production bundle in `.output/`; pair with `pnpm preview` to smoke-test the build.
14+
- `pnpm generate` builds static assets for edge deployments.
15+
- `pnpm lint` and `pnpm lint:fix` enforce ESLint rules; run before every PR.
16+
- `pnpm typecheck` runs `tsc --noEmit` to catch typing regressions early.
17+
18+
## Coding Style & Naming Conventions
19+
- Follow the repo `.editorconfig`: 2-space indentation, LF endings, UTF-8 encoding, trailing newline.
20+
- Prefer composition-friendly Vue components with `<script setup lang="ts">` and PascalCase filenames.
21+
- Keep composables and utilities in kebab-case files exporting camelCase functions.
22+
- ESLint extends `@nuxt/eslint-config`; resolve warnings instead of suppressing them.
23+
24+
## Testing Guidelines
25+
- Add integration or unit tests with Vitest + Nuxt test utils (create `tests/**/*.spec.ts`).
26+
- Mirror component names in test filenames (`Button.spec.ts`) and arrange describe blocks by feature.
27+
- Run `pnpm lint` and `pnpm typecheck` at minimum; include Vitest coverage when backend logic changes.
28+
29+
## Commit & Pull Request Guidelines
30+
- Follow concise, present-tense messages (`feat: add hero carousel`, `fix(contact): guard API errors`).
31+
- Reference issue IDs when relevant and mention any config or schema migrations.
32+
- PRs must summarize changes, list verification steps (`pnpm build`, `pnpm lint`), and attach UI screenshots for visible updates.
33+
- Request review from a maintainer and wait for green CI before merging.
34+
35+
## Environment & Deployment Notes
36+
- Copy `.env.example` to `.env` for local secrets; never commit secrets.
37+
- Use `pnpm deploy` (wrapping `nuxthub deploy`) once builds pass locally.
38+
- Docker assets (`Dockerfile`, `docker-compose.local.yml`) support parity testing; rebuild images after dependency changes.

Dockerfile

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,30 @@
11
# Stage 1: Build Stage
2-
FROM node:22.14.0-alpine AS build
2+
FROM node:22-alpine AS build
33

44
WORKDIR /app
55

6+
ENV NODE_ENV=production
7+
8+
# Copy package files first for better layer caching
69
COPY pnpm-lock.yaml package.json ./
710

811
COPY . .
912

1013
RUN npm install -g corepack@latest
1114
RUN corepack enable
1215

13-
RUN pnpm install --frozen-lockfile --prod
16+
RUN pnpm install
1417

1518
RUN pnpm run build
1619

1720
# Stage 2: Final Stage
18-
FROM node:22.14.0-alpine AS final
21+
FROM node:22-alpine AS final
1922

2023
WORKDIR /app
2124

2225
COPY --from=build /app/.output .output
2326

24-
RUN apk update && apk add --no-cache curl
27+
RUN apk update && apk upgrade && apk add --no-cache curl
2528

2629

2730
EXPOSE 3000

app/app.config.ts

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ export default defineAppConfig({
88
job: 'Fullstack Developer',
99
email: 'sione.xy@gmail.com',
1010
phone: '(+234) ',
11-
picture: 'https://avatars.githubusercontent.com/u/102559775?v=4',
11+
picture: '/profile.webp',
1212
},
1313
socials: {
1414
github: 'https://github.com/Psionyc',
@@ -20,7 +20,7 @@ export default defineAppConfig({
2020
seo: {
2121
title: 'Psyone: Fullstack Engineer & Web3 Innovator',
2222
description: 'Explore the portfolio of Psyone—a fullstack engineer building innovative Web3 solutions and creative digital experiences. Racing and football fan, gym goer, and budding videographer making tech and design run in sync.',
23-
url: 'https://psyone.xyz',
23+
url: 'https://psyone.dev',
2424
},
2525
ui: {
2626
colors: {
@@ -69,17 +69,12 @@ export default defineAppConfig({
6969
sizes: '180x180',
7070
href: '/apple-touch-icon.png',
7171
},
72+
7273
{
7374
rel: 'icon',
7475
type: 'image/png',
75-
sizes: '32x32',
76-
href: '/favicon-32x32.png',
77-
},
78-
{
79-
rel: 'icon',
80-
type: 'image/png',
81-
sizes: '16x16',
82-
href: '/favicon-16x16.png',
76+
sizes: '96x96',
77+
href: '/favicon-96x96.png',
8378
},
8479
{
8580
rel: 'manifest',

app/assets/icons/drizzle.svg

Lines changed: 6 additions & 0 deletions
Loading

app/assets/icons/flyio.svg

Lines changed: 12 additions & 31 deletions
Loading
-192 KB
Binary file not shown.

app/assets/icons/rust.svg

Lines changed: 2 additions & 0 deletions
Loading

app/components/content/Contact.vue

Lines changed: 19 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -51,100 +51,36 @@ async function onSubmit(event: FormSubmitEvent<Schema>) {
5151
<template>
5252
<section class="mx-auto mt-4 flex max-w-4xl flex-col p-7 sm:mt-20">
5353
<h1 class="font-newsreader italic text-white-shadow text-center text-4xl">
54-
<slot
55-
name="title"
56-
mdc-unwrap="p"
57-
/>
54+
<slot name="title" mdc-unwrap="p" />
5855
</h1>
5956
<h2 class="text-center text-lg font-extralight italic text-muted">
60-
<slot
61-
name="subtitle"
62-
mdc-unwrap="p"
63-
/>
57+
<slot name="subtitle" mdc-unwrap="p" />
6458
</h2>
6559
<Divider class="mb-8 mt-2" />
6660
<div class="flex flex-col sm:items-center sm:justify-between">
67-
<UForm
68-
:state
69-
:schema
70-
class="flex w-full max-w-[40rem] flex-col gap-3"
71-
@submit="onSubmit"
72-
>
73-
<UFormField
74-
label="Fullname"
75-
name="fullname"
76-
required
77-
>
78-
<UInput
79-
v-model="state.fullname"
80-
type="text"
81-
autocomplete="name"
82-
class="w-full"
83-
placeholder="John Doe"
84-
/>
61+
<UForm :state :schema class="flex w-full max-w-[40rem] flex-col gap-3" @submit="onSubmit">
62+
<UFormField label="Fullname" name="fullname" required>
63+
<UInput v-model="state.fullname" type="text" autocomplete="name" class="w-full" placeholder="John Doe" />
8564
</UFormField>
8665

87-
<UFormField
88-
label="Email"
89-
name="email"
90-
required
91-
>
92-
<UInput
93-
v-model="state.email"
94-
autocomplete="email"
95-
class="w-full"
96-
placeholder="john.doe@gmail.com"
97-
/>
66+
<UFormField label="Email" name="email" required>
67+
<UInput v-model="state.email" autocomplete="email" class="w-full" placeholder="john.doe@gmail.com" />
9868
</UFormField>
9969

100-
<UFormField
101-
label="Phone"
102-
name="phone"
103-
>
104-
<UInput
105-
v-model="state.phone"
106-
autocomplete="tel"
107-
class="w-full"
108-
placeholder="123-456-7890"
109-
/>
70+
<UFormField label="Phone" name="phone">
71+
<UInput v-model="state.phone" autocomplete="tel" class="w-full" placeholder="123-456-7890" />
11072
</UFormField>
11173

112-
<UFormField
113-
label="Subject"
114-
name="subject"
115-
required
116-
>
117-
<UInput
118-
v-model="state.subject"
119-
class="w-full"
120-
:placeholder="$t('contact.subject')"
121-
/>
74+
<UFormField label="Subject" name="subject" required>
75+
<UInput v-model="state.subject" class="w-full" :placeholder="$t('contact.subject')" />
12276
</UFormField>
12377

124-
<UFormField
125-
label="Message"
126-
name="message"
127-
required
128-
>
129-
<UTextarea
130-
v-model="state.message"
131-
autoresize
132-
class="w-full"
133-
:rows="4"
134-
placeholder="Lets work together!"
135-
/>
78+
<UFormField label="Message" name="message" required>
79+
<UTextarea v-model="state.message" autoresize class="w-full" :rows="4" placeholder="Lets work together!" />
13680
</UFormField>
13781
<div class="flex justify-center">
138-
<UTooltip
139-
:disabled="isResendEnabled"
140-
:text="$t('contact.disabled')"
141-
>
142-
<UButton
143-
:loading
144-
:disabled="!isResendEnabled"
145-
type="submit"
146-
block
147-
>
82+
<UTooltip :disabled="isResendEnabled" :text="$t('contact.disabled')">
83+
<UButton :loading :disabled="!isResendEnabled" type="submit" block>
14884
{{ $t("contact.submit") }}
14985
</UButton>
15086
</UTooltip>
@@ -154,29 +90,15 @@ async function onSubmit(event: FormSubmitEvent<Schema>) {
15490
<div class="flex w-full flex-col items-center justify-between gap-4 sm:flex-row">
15591
<div class="flex flex-col gap-3">
15692
<dd class="flex items-center gap-3 text-neutral-400">
157-
<UIcon
158-
name="heroicons-phone"
159-
class="size-6"
160-
aria-hidden="true"
161-
/>
93+
<UIcon name="heroicons-phone" class="size-6" aria-hidden="true" />
16294
<span>
16395
{{ profile.phone }}
16496
</span>
16597
</dd>
16698
<dd class="flex items-center gap-3 text-neutral-400">
167-
<UIcon
168-
name="heroicons-envelope"
169-
class="size-6"
170-
aria-hidden="true"
171-
/>
172-
<UTooltip
173-
:text="$t('global.email')"
174-
:shortcuts="['⌘', 'O']"
175-
>
176-
<NuxtLink
177-
:to="`mailto:${profile.email}`"
178-
class="cursor-pointer transition-colors duration-300"
179-
>
99+
<UIcon name="heroicons-envelope" class="size-6" aria-hidden="true" />
100+
<UTooltip :text="$t('global.email')" :shortcuts="['⌘', 'O']">
101+
<NuxtLink :to="`mailto:${profile.email}`" class="cursor-pointer transition-colors duration-300">
180102
{{ profile.email }}
181103
</NuxtLink>
182104
</UTooltip>

0 commit comments

Comments
 (0)