Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .env.example
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
APP_NAME="CRM Lite"
APP_NAME="NextClient"
APP_ENV=local
APP_KEY=
APP_DEBUG=true
Expand Down
10 changes: 5 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# NextClient
# NextClientnt

NextClient is a Laravel 13 + Vue 3 + Inertia.js CRM for freelancers and small service businesses. It ships with custom Fortify-based authentication, optional Socialite login, a polished SaaS-style dashboard, client management, searchable records, client notes, archive workflows, reminder tooling, and production-safe defaults.
NextClientnt is a Laravel 13 + Vue 3 + Inertia.js CRM for freelancers and small service businesses. It ships with custom Fortify-based authentication, optional Socialite login, a polished SaaS-style dashboard, client management, searchable records, client notes, archive workflows, reminder tooling, and production-safe defaults.

## Stack

Expand Down Expand Up @@ -109,11 +109,11 @@ GITHUB_CLIENT_SECRET=
GITHUB_REDIRECT_URI="${APP_URL}/auth/github/callback"
```

If a provider is missing credentials, NextClient hides that button and fails gracefully if its callback is hit directly.
If a provider is missing credentials, NextClientnt hides that button and fails gracefully if its callback is hit directly.

## Demo Accounts

If you run the local sample seeder, NextClient creates these accounts:
If you run the local sample seeder, NextClientnt creates these accounts:

- `owner@example.com` / `password`
Role: `admin`
Expand Down Expand Up @@ -216,7 +216,7 @@ The default drivers are chosen for simple VPS deployment:
- `CACHE_STORE=database`
- `QUEUE_CONNECTION=database`

For SQLite-specific backups, NextClient includes:
For SQLite-specific backups, NextClientnt includes:

```bash
php artisan crm:backup:sqlite
Expand Down
2 changes: 1 addition & 1 deletion app/Mail/FollowUpReminderDigestMail.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ public function __construct(
public function envelope(): Envelope
{
return new Envelope(
subject: "Your CRM Lite follow-up digest for {$this->digestDateLabel}",
subject: "Your NextClient follow-up digest for {$this->digestDateLabel}",
);
}

Expand Down
2 changes: 1 addition & 1 deletion resources/js/components/AppLogo.vue
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import AppLogoIcon from '@/components/AppLogoIcon.vue';
/>
<div class="ml-2 grid flex-1 text-left text-sm">
<span class="mb-0.5 truncate leading-tight font-semibold">
CRM Lite
NextClient
</span>
<span class="truncate text-xs text-slate-500 dark:text-slate-400">
Freelancer workspace
Expand Down
2 changes: 1 addition & 1 deletion resources/js/layouts/auth/AuthSplitLayout.vue
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ defineProps<{
chaos.
</h1>
<p class="mt-6 max-w-2xl text-lg leading-8 text-slate-300/95">
CRM Lite gives solo operators a calm, fast home for leads,
NextClient gives solo operators a calm, fast home for leads,
follow-ups, notes, and account activity with the polish of a
modern SaaS product.
</p>
Expand Down
34 changes: 23 additions & 11 deletions resources/js/pages/Welcome.vue
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ const isAuthenticated = computed(() => page.props.auth.user !== null);
</script>

<template>
<Head title="CRM Lite">
<Head title="NextClient">
<link rel="icon" href="/CRM-lite-logo.ico" sizes="any" />
<link rel="icon" href="/CRM-lite-logo.svg" type="image/svg+xml" />
</Head>
Expand All @@ -50,15 +50,15 @@ const isAuthenticated = computed(() => page.props.auth.user !== null);
<div class="rounded-2xl bg-white/10 p-2.5 ring-1 ring-white/10">
<img
src="/CRM-lite-logo.svg"
alt="CRM Lite logo"
alt="NextClient logo"
class="size-10 rounded-xl object-contain"
/>
</div>
<div>
<p
class="text-sm font-semibold tracking-[0.22em] text-emerald-300 uppercase"
>
CRM Lite
NextClient
</p>
<p class="text-sm text-slate-300">
Client relationships, simplified
Expand Down Expand Up @@ -113,7 +113,7 @@ const isAuthenticated = computed(() => page.props.auth.user !== null);
moving.
</h1>
<p class="mt-6 max-w-2xl text-lg leading-8 text-slate-300">
CRM Lite gives freelancers and small service teams a calm,
NextClient gives freelancers and small service teams a calm,
premium-looking workspace for leads, proposals, follow-ups,
notes, and delivery. Spend less time chasing details and
more time looking organized in front of clients.
Expand Down Expand Up @@ -240,25 +240,37 @@ const isAuthenticated = computed(() => page.props.auth.user !== null);
sticky notes or spreadsheets.
</p>
<div
class="mt-6 grid grid-cols-3 gap-3 text-center text-xs tracking-[0.2em] text-slate-400 uppercase"
class="mt-6 grid grid-cols-3 gap-2 text-center text-slate-400 uppercase sm:gap-3"
>
<div class="rounded-2xl bg-white/5 px-3 py-3">
<div class="min-w-0 rounded-2xl bg-white/5 px-2 py-3 sm:px-3">
<p class="text-lg font-semibold text-white">
8
</p>
Leads
<p
class="mt-1 text-[0.65rem] leading-tight tracking-[0.12em]"
>
Leads
</p>
</div>
<div class="rounded-2xl bg-white/5 px-3 py-3">
<div class="min-w-0 rounded-2xl bg-white/5 px-2 py-3 sm:px-3">
<p class="text-lg font-semibold text-white">
11
</p>
Active
<p
class="mt-1 text-[0.65rem] leading-tight tracking-[0.12em]"
>
Active
</p>
</div>
<div class="rounded-2xl bg-white/5 px-3 py-3">
<div class="min-w-0 rounded-2xl bg-white/5 px-2 py-3 sm:px-1">
<p class="text-lg font-semibold text-white">
3
</p>
Awaiting reply
<p
class="mt-1 text-[0.65rem] leading-tight tracking-[0.08em]"
>
Awaiting reply
</p>
</div>
</div>
</div>
Expand Down
2 changes: 1 addition & 1 deletion resources/js/pages/admin/Users.vue
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ const saveRole = (user: AdminUserListItem) => {
<StatCard
title="Total users"
:value="users.length"
description="Everyone with an account in this CRM Lite install."
description="Everyone with an account in this NextClient install."
:icon="UsersRound"
/>
<StatCard
Expand Down
2 changes: 1 addition & 1 deletion resources/js/pages/auth/Register.vue
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import { store } from '@/routes/register';

defineOptions({
layout: {
title: 'Create your CRM Lite account',
title: 'Create your NextClient account',
description:
'Start with a clean, secure workspace for leads, active clients, and follow-ups.',
},
Expand Down
2 changes: 1 addition & 1 deletion resources/js/pages/clients/Index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -285,7 +285,7 @@ const deleteSavedView = (savedView: SavedClientView) => {
class="text-xs leading-5 text-slate-500 dark:text-slate-400"
>
If an imported row matches one of your
existing client emails, CRM Lite updates
existing client emails, NextClient updates
that client instead of creating a duplicate.
</p>
<p
Expand Down
2 changes: 1 addition & 1 deletion resources/js/pages/errors/Status.vue
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ const copy = {
503: {
title: 'Temporarily unavailable',
description:
'CRM Lite is briefly unavailable while the application recovers or updates.',
'NextClient is briefly unavailable while the application recovers or updates.',
},
}[props.status] ?? {
title: 'Unexpected error',
Expand Down
2 changes: 1 addition & 1 deletion resources/js/pages/portal/Show.vue
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ defineProps<{
<p
class="text-sm font-semibold tracking-[0.2em] text-emerald-600 uppercase dark:text-emerald-300"
>
{{ portal.workspace || 'CRM Lite' }}
{{ portal.workspace || 'NextClient' }}
</p>
<h1
class="mt-4 text-3xl font-semibold tracking-tight text-slate-950 dark:text-white"
Expand Down
2 changes: 1 addition & 1 deletion resources/js/pages/settings/Profile.vue
Original file line number Diff line number Diff line change
Expand Up @@ -340,7 +340,7 @@ function disconnectProvider(providerName: string, label: string): void {
<Heading
variant="small"
title="Reminder emails"
description="Choose whether CRM Lite should email you a follow-up digest when clients need attention."
description="Choose whether NextClient should email you a follow-up digest when clients need attention."
/>

<Form
Expand Down
2 changes: 1 addition & 1 deletion resources/js/pages/settings/Workspace.vue
Original file line number Diff line number Diff line change
Expand Up @@ -324,7 +324,7 @@ const submitWorkspace = () => {
<Heading
variant="small"
title="Add an existing user"
description="Invite someone who already has an account in this CRM Lite install into the current workspace."
description="Invite someone who already has an account in this NextClient install into the current workspace."
/>

<form
Expand Down
2 changes: 1 addition & 1 deletion resources/views/mail/follow-up-digest.blade.php
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<div style="font-family: Arial, sans-serif; color: #0f172a; line-height: 1.6;">
<h1 style="margin-bottom: 8px;">Your follow-up digest</h1>
<p style="margin-top: 0;">
Hello {{ $user->name }}, here is your CRM Lite follow-up summary for {{ $digestDateLabel }}.
Hello {{ $user->name }}, here is your NextClient follow-up summary for {{ $digestDateLabel }}.
</p>

<p>
Expand Down
Loading