Web application for managing a personal digital journal, with collections and entries designed to support users in their daily writing, organization, and reflection process.
Designed with a soft, illustrated, and minimalist aesthetic intended to feel like a small personal universe.
- Introduction
- Requirements
- Clone the repository
- Installation
- Project stack
- Environments and integration
- Branch modeling
- Deployment
- Architecture
- Formatting configuration
- Testing
- Screenshots
Journally WEB is an application focused on personal journaling. Its goal is to provide users with a friendly, simple, and aesthetic tool to record their day-to-day life and organize their thoughts through collections and entries.
βοΈ Create collections
βοΈ Create entries within a collection
βοΈ Edit collection and entry names
βοΈ Delete items
βοΈ Clear navigation between sections
βοΈ Intuitive UI with tooltips, modals, and visual feedback
βοΈ Automatic access-token renewal and logout when the session expires
The application uses a style that is:
-
Warm and soft
-
Handwritten typography
-
Custom space-themed illustrations
-
Friendly interface focused on user experience
-
Rounded components, pastel tones, and vibrant colors for action states
(Inspired by a small personal universe β¨)
- Node.js 22 or newer
- pnpm 11.x (the repository pins pnpm 11.20.0)
- A running Journally API instance
git clone https://github.com/SabriBere/Journally-Web.git
cd Journally-Web- Install dependencies.
pnpm install --frozen-lockfile- Create a
.env.devfile from.env.example.
cp .env.example .env.dev-
Start Journally API by following its README. The default values in
.env.exampleexpect it athttp://localhost:8080. -
Start the frontend.
pnpm dev- Open http://localhost:3000.
- Next.js v.15
- TypeScript
- React 19
- Redux Toolkit
- React Query (TanStack Query)
- Sass / SCSS Modules
- NextAuth
- Axios
- WebSocket
- TipTap
- Jest and Testing Library
The frontend depends on Journally API for authentication, collections, entries, and real-time updates.
For the default local setup:
- REST API:
http://localhost:8080/api - WebSocket:
ws://localhost:8080/entries - Frontend:
http://localhost:3000
Start the API before testing login, registration, or journal features. User registration is performed through the frontend and sent to the API.
The repository includes .env.example as a safe template for documenting the required variables without exposing real credentials.
.env.devis used for local development..env.prodis used for local production builds.- Files with real values must not be committed to the repository.
Expected variables:
| Variable | Purpose |
|---|---|
NEXT_PUBLIC_API_URL |
Public URL of the API consumed by the frontend. |
NEXT_PUBLIC_SOCKET_URL |
WebSocket endpoint used for real-time entry updates. |
NEXTAUTH_URL |
Base URL used by NextAuth. |
NEXTAUTH_SECRET |
Secret used by NextAuth. It must be defined with a secure value outside the repository. |
Variables prefixed with
NEXT_PUBLIC_may be exposed to the browser. They must not contain secrets.
| Command | Purpose |
|---|---|
pnpm dev |
Start the development server with .env.dev and Turbopack. |
pnpm production |
Build locally with variables loaded from .env.prod. |
pnpm build |
Create the standard production build used by CI and Vercel. |
pnpm test |
Run the Jest test suite. |
pnpm test:watch |
Run Jest in watch mode. |
pnpm test:coverage |
Run Jest and generate a coverage report. |
pnpm test:ci |
Run the tests serially without Watchman. |
pnpm lint |
Run ESLint against JavaScript and TypeScript source files. |
The project uses develop as the integration branch and master as the production branch.
feature/*branches must be opened as pull requests intodevelop.bugFix/*branches must be opened as pull requests intodevelop.hotfix/*branches can be opened as pull requests intomasterfor urgent production fixes.- After a
hotfix/*branch is merged intomaster, the fix must be merged back intodevelop. developis merged intomasterfor production releases.
The frontend can be deployed to a platform such as Vercel by connecting the repository to the corresponding project.
- The deployment provider must read environment variables from its project configuration, not from versioned
.envfiles. - Sensitive values, such as
NEXTAUTH_SECRET, must be configured directly in the deployment provider. - CI and Vercel use the standard production build command:
pnpm buildFor a local build that explicitly loads .env.prod, run pnpm production.
To keep the repository ready for publication:
- keep only
.env.exampleunder version control; - do not publish tokens, secrets, or provider IDs;
- document only the names of the required variables, not their real values.
src/
βββ app
β βββ api
β β βββ auth
β β β βββ [...nextauth]
β β βββ provider
β βββ collection
β β βββ [id]
β βββ entries
β β βββ [id]
β βββ home
β β βββ components
β βββ login
β β βββ components
β βββ register
β βββ components
βββ commons
β βββ Buttons
β βββ Cards
β βββ Editor
β βββ EmptyStates
β βββ Footer
β βββ Ilustrations
β βββ InfinteScroll
β βββ Inputs
β βββ Modals
β βββ Navbar
β βββ NotFound
β βββ Sidebar
β βββ Skeletons
β βββ Spinner
β βββ Switch
β βββ Tabs
β βββ Title
β βββ Toast
β βββ Tooltip
βββ config
βββ contexts
βββ hooks
βββ services
βββ store
βββ styles
β βββ icons
βββ types
βββ utilsThe repository includes this .prettierrc configuration:
{
"semi": true,
"trailingComma": "es5",
"singleQuote": false,
"printWidth": 80,
"tabWidth": 4,
"endOfLine": "lf"
}The project uses ESLint flat config through eslint.config.mjs, extending:
next/core-web-vitalsnext/typescriptprettier
It also includes rules for imports, React hooks, TanStack Query, Testing Library, and Jest.
The project uses Jest for automated testing.
pnpm test
pnpm test:ci
pnpm test:coverage-
βοΈ Collection name editing






