Skip to content

Commit 795800d

Browse files
committed
Fix spelling of "AkoFlow" to "AkôFlow" across multiple files and update related messages for consistency
1 parent 8ff93e3 commit 795800d

12 files changed

Lines changed: 99 additions & 71 deletions

File tree

cloud/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
# Cloud
22

3-
Pasta reservada para a futura versão cloud do AkoFlow.
3+
Pasta reservada para a futura versão cloud do AkôFlow.

desktop/README.md

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,32 @@
1-
# AkoFlow Desktop
1+
# AkôFlow Desktop
22

3-
Interface local do AkoFlow em Electron.
3+
Local interface for AkôFlow built with Electron.
44

5-
## O que ela faz
5+
## What it does
66

7-
- Verifica se o Docker está instalado.
8-
- Verifica se o daemon do Docker está ativo.
9-
- Orienta a instalação ou abertura do Docker Desktop quando necessário.
10-
- Serve como porta de entrada para o fluxo local que vai usar a imagem de release.
7+
- Checks if Docker is installed.
8+
- Checks if the Docker daemon is running.
9+
- Guides the user to install or open Docker Desktop when needed.
10+
- Serves as an entry point for the local flow that will use the release image.
1111

12-
## Estrutura
12+
## Structure
1313

14-
- `electron/` - processo principal, preload e integração com o sistema.
15-
- `renderer/app.js` - bootstrap da interface.
16-
- `renderer/components/` - blocos reutilizáveis da tela.
17-
- `renderer/services/` - acesso ao estado do Docker e ações externas.
18-
- `renderer/styles.css` - tema visual da aplicação.
19-
- `renderer/styles/` - tokens, layout, hero, status e responsividade.
14+
- `electron/` - main process, preload, and system integration.
15+
- `renderer/app.js` - interface bootstrap.
16+
- `renderer/components/` - reusable screen blocks.
17+
- `renderer/services/` - access to Docker state and external actions.
18+
- `renderer/styles.css` - application's visual theme.
19+
- `renderer/styles/` - tokens, layout, hero, status, and responsiveness.
2020

21-
## Fluxo esperado
21+
## Expected flow
2222

23-
1. Instalar as dependências com `npm install`.
24-
2. Abrir a aplicação com `npm start`.
25-
3. Se o Docker não existir, a tela mostra o link de instalação.
26-
4. Se o daemon estiver desligado, a tela orienta a abrir o Docker Desktop.
23+
1. Install dependencies with `npm install`.
24+
2. Open the application with `npm start`.
25+
3. If Docker is not installed, the screen shows the installation link.
26+
4. If the daemon is off, the screen guides the user to open Docker Desktop.
2727

2828
## Welcome flow
2929

30-
- Tela inicial em etapas com animação e progresso.
31-
- Detecção automática do sistema para sugerir o download correto.
32-
- Caminho guiado: welcome, Docker, daemon, release image.
30+
- Step-by-step initial screen with animation and progress.
31+
- Automatic system detection to suggest the correct download.
32+
- Guided path: welcome, Docker, daemon, release image.

desktop/electron/main.js

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@ const shouldOpenDevTools = process.env.AKOFLOW_OPEN_DEVTOOLS === '1';
1010

1111
function logMain(message, details) {
1212
if (details !== undefined) {
13-
console.log(`[AkoFlow] ${message}`, details);
13+
console.log(`[AkôFlow] ${message}`, details);
1414
return;
1515
}
1616

17-
console.log(`[AkoFlow] ${message}`);
17+
console.log(`[AkôFlow] ${message}`);
1818
}
1919

2020
async function checkDockerStatus() {
@@ -28,7 +28,7 @@ async function checkDockerStatus() {
2828
return {
2929
status: 'missing',
3030
title: 'Docker not found',
31-
message: 'Install Docker Desktop to continue using AkoFlow locally.',
31+
message: 'Install Docker Desktop to continue using AkôFlow locally.',
3232
error: error?.message || 'Docker CLI is unavailable.',
3333
actionLabel: 'Install Docker Desktop',
3434
actionUrl: 'https://www.docker.com/products/docker-desktop/',
@@ -101,7 +101,7 @@ function getSystemInfo() {
101101
const platformLabel = platformLabels[platform] ?? platform;
102102
const architectureLabel = architectureLabels[architecture] ?? architecture.toUpperCase();
103103

104-
logs.push(`[AkoFlow] Collecting system information: ${platformLabel} / ${architectureLabel}`);
104+
logs.push(`[AkôFlow] Collecting system information: ${platformLabel} / ${architectureLabel}`);
105105
logMain('Collecting system information', `${platformLabel} / ${architectureLabel}`);
106106

107107
return {
@@ -171,7 +171,7 @@ function createWindow() {
171171
minWidth: 1100,
172172
minHeight: 760,
173173
backgroundColor: '#07111f',
174-
title: 'AkoFlow Desktop',
174+
title: 'AkôFlow Desktop',
175175
icon: path.join(__dirname, '..', 'assets', iconFile),
176176
webPreferences: {
177177
preload: path.join(__dirname, 'preload.js'),
@@ -209,10 +209,9 @@ function createWindow() {
209209
}
210210

211211
/* ─────────────────────────────────────────────────────────────
212-
AkoFlow container management
212+
AkôFlow container management
213213
───────────────────────────────────────────────────────────── */
214214
const AKOFLOW_CONTAINER = 'akoflow-local';
215-
const AKOFLOW_VOLUME = 'akoflow-local-data';
216215
const AKOFLOW_IMAGE = 'akoflow/akoflow';
217216
const AKOFLOW_PORT = 7777;
218217

@@ -270,21 +269,35 @@ ipcMain.handle('akoflow:pull-image', async (event) => {
270269

271270
ipcMain.handle('akoflow:start-container', async () => {
272271
logMain('Starting container', AKOFLOW_CONTAINER);
273-
// Remove any leftover container (stopped / exited)
272+
273+
// Check if a container already exists (may be stopped / exited)
274274
try {
275-
await execFileAsync('docker', ['rm', '-f', AKOFLOW_CONTAINER], { timeout: 8000 });
276-
} catch { /* nothing to remove */ }
275+
const { stdout } = await execFileAsync('docker', [
276+
'inspect', AKOFLOW_CONTAINER, '--format', '{{.State.Status}}',
277+
], { timeout: 5000 });
278+
279+
const status = stdout.trim();
280+
logMain('Existing container found', status);
281+
282+
if (status === 'running') {
283+
logMain('Container already running');
284+
return { ok: true };
285+
}
286+
287+
// Stopped / exited — restart it (preserves filesystem & data)
288+
await execFileAsync('docker', ['start', AKOFLOW_CONTAINER], { timeout: 15000 });
289+
logMain('Container restarted');
290+
return { ok: true };
291+
} catch { /* container does not exist — create it fresh */ }
277292

278293
await execFileAsync('docker', [
279294
'run', '-d',
280-
'--rm',
281295
'--name', AKOFLOW_CONTAINER,
282296
'-p', `${AKOFLOW_PORT}:80`,
283-
'-v', `${AKOFLOW_VOLUME}:/data`,
284297
AKOFLOW_IMAGE,
285298
], { timeout: 15000 });
286299

287-
logMain('Container started');
300+
logMain('Container created and started');
288301
return { ok: true };
289302
});
290303

@@ -347,13 +360,13 @@ app.on('window-all-closed', () => {
347360
}
348361
});
349362

350-
// Stop the AkoFlow container gracefully when the app quits
363+
// Stop the AkôFlow container gracefully when the app quits
351364
let isQuitting = false;
352365
app.on('will-quit', (event) => {
353366
if (isQuitting) return;
354367
event.preventDefault();
355368
isQuitting = true;
356-
logMain('App quitting — stopping AkoFlow container');
369+
logMain('App quitting — stopping AkôFlow container');
357370
Promise.race([
358371
stopAkoflowContainer(),
359372
new Promise((resolve) => setTimeout(resolve, 6000)),

desktop/electron/preload.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ contextBridge.exposeInMainWorld('akoflow', {
4040
return ipcRenderer.invoke('docker:open-action', actionUrl);
4141
},
4242

43-
/* ── AkoFlow container ── */
43+
/* ── AkôFlow container ── */
4444
checkAkoflowRunning: () => ipcRenderer.invoke('akoflow:check-running'),
4545
pullImage: () => ipcRenderer.invoke('akoflow:pull-image'),
4646
startContainer: () => ipcRenderer.invoke('akoflow:start-container'),

desktop/renderer/react/App.jsx

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,13 @@ export function App() {
2020
}, []);
2121

2222
if (phase === 'init') {
23-
return <CheckingScreen message="Checking environment…" />;
23+
return <InitSpinner />;
2424
}
2525

2626
if (phase === 'already-running') {
2727
return (
2828
<CheckingScreen
29-
message="AkoFlow is already running. Connecting…"
29+
message="AkôFlow is already running. Connecting…"
3030
onReady={() => setPhase('app')}
3131
/>
3232
);
@@ -58,6 +58,22 @@ export function App() {
5858
return null;
5959
}
6060

61+
function InitSpinner() {
62+
return (
63+
<main className="single-screen">
64+
<div className="single-screen__ambient single-screen__ambient--one" />
65+
<section className="single-screen__card">
66+
<img className="single-screen__logo" src={AKOFLOW_LOGO_URL} alt="AkôFlow" />
67+
<div className="single-screen__content">
68+
<div className="loading-pulse">
69+
<div className="loading-pulse__ring" />
70+
</div>
71+
</div>
72+
</section>
73+
</main>
74+
);
75+
}
76+
6177
function CheckingScreen({ message, onReady }) {
6278
useEffect(() => {
6379
if (!onReady) return undefined;
@@ -70,7 +86,7 @@ function CheckingScreen({ message, onReady }) {
7086
<div className="single-screen__ambient single-screen__ambient--one" />
7187
<div className="single-screen__ambient single-screen__ambient--two" />
7288
<section className="single-screen__card">
73-
<img className="single-screen__logo" src={AKOFLOW_LOGO_URL} alt="AkoFlow" />
89+
<img className="single-screen__logo" src={AKOFLOW_LOGO_URL} alt="AkôFlow" />
7490
<div className="single-screen__content single-screen__content--animated">
7591
<div className="loading-pulse">
7692
<div className="loading-pulse__ring" />

desktop/renderer/react/components/AppScreen.jsx

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ export function AppScreen({ onStop }) {
2020
<div className="app-screen">
2121
<header className="app-screen__header">
2222
<div className="app-screen__brand">
23-
<img src={AKOFLOW_LOGO_URL} alt="AkoFlow" className="app-screen__logo" />
24-
<span className="app-screen__name">AkoFlow</span>
23+
<img src={AKOFLOW_LOGO_URL} alt="AkôFlow" className="app-screen__logo" />
24+
<span className="app-screen__name">AkôFlow</span>
2525
<span className="app-screen__url">{APP_URL}</span>
2626
</div>
2727

@@ -31,19 +31,18 @@ export function AppScreen({ onStop }) {
3131
onClick={handleStopClick}
3232
disabled={stopping}
3333
>
34-
{stopping ? 'Stopping…' : '■ Stop AkoFlow'}
34+
{stopping ? 'Stopping…' : '■ Stop AkôFlow'}
3535
</button>
3636
</header>
3737

3838
{/* Confirm dialog */}
3939
{showConfirm && (
4040
<div className="app-screen__overlay">
4141
<div className="app-screen__dialog">
42-
<img src={AKOFLOW_LOGO_URL} alt="AkoFlow" className="app-screen__dialog-logo" />
43-
<h2 className="app-screen__dialog-title">Stop AkoFlow?</h2>
42+
<img src={AKOFLOW_LOGO_URL} alt="AkôFlow" className="app-screen__dialog-logo" />
43+
<h2 className="app-screen__dialog-title">Stop AkôFlow?</h2>
4444
<p className="app-screen__dialog-body">
45-
The container will be stopped. Your environment data is preserved in the
46-
<strong> akoflow-local-data</strong> volume — everything will be here when you come back.
45+
The container will be stopped, but <strong>your environment is not removed</strong> — all data stays inside the container and will be here when you come back.
4746
</p>
4847
<div className="app-screen__dialog-actions">
4948
<button
@@ -68,7 +67,7 @@ export function AppScreen({ onStop }) {
6867
<iframe
6968
className="app-screen__iframe"
7069
src={APP_URL}
71-
title="AkoFlow"
70+
title="AkôFlow"
7271
allow="clipboard-read; clipboard-write"
7372
/>
7473
</div>

desktop/renderer/react/components/DiagnosticsScreen.jsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ export function DiagnosticsScreen({ state, onRefresh, onLaunch }) {
5050
};
5151

5252
const nextLabel = (() => {
53-
if (isLastStep) return 'Launch AkoFlow →';
53+
if (isLastStep) return 'Launch AkôFlow →';
5454
if (stepIndex === 1 && state.error) return 'Continue anyway →';
5555
return 'Next →';
5656
})();
@@ -61,7 +61,7 @@ export function DiagnosticsScreen({ state, onRefresh, onLaunch }) {
6161
<AmbientBlobs />
6262

6363
<section className="single-screen__card">
64-
<img className="single-screen__logo" src={AKOFLOW_LOGO_URL} alt="AkoFlow" />
64+
<img className="single-screen__logo" src={AKOFLOW_LOGO_URL} alt="AkôFlow" />
6565

6666
<StepIndicator steps={STEPS} current={stepIndex} />
6767

@@ -179,7 +179,7 @@ function LogPanel({ logs, error }) {
179179
function StepWelcome() {
180180
return (
181181
<>
182-
<div className="single-screen__label">Welcome to AkoFlow</div>
182+
<div className="single-screen__label">Welcome to AkôFlow</div>
183183
<h1 className="single-screen__title">Local<br />Release.</h1>
184184
<p className="single-screen__copy">
185185
Preparing your environment. System checks will begin automatically.
@@ -269,7 +269,7 @@ function StepReady({ state, systemSummary, systemOk, dockerOk }) {
269269
<div className="single-screen__label">All set.</div>
270270
<h1 className="single-screen__title">Ready to<br />launch.</h1>
271271
<p className="single-screen__copy">
272-
AkoFlow will be pulled and started via Docker.
272+
AkôFlow will be pulled and started via Docker.
273273
</p>
274274
<CheckList checks={checks} />
275275
</>

desktop/renderer/react/components/LaunchingScreen.jsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { AKOFLOW_LOGO_URL } from '../brandAssets.jsx';
33

44
const LAUNCH_STEPS = [
55
{ id: 'pull', label: 'Pulling latest image', detail: 'akoflow/akoflow' },
6-
{ id: 'start', label: 'Starting container', detail: `Port 7777 · Volume akoflow-local-data` },
6+
{ id: 'start', label: 'Starting container', detail: 'Port 7777 · akoflow-local' },
77
{ id: 'health', label: 'Waiting for service', detail: 'http://localhost:7777' },
88
];
99

@@ -113,10 +113,10 @@ export function LaunchingScreen({ onLaunched, onBack }) {
113113
<div className="single-screen__ambient single-screen__ambient--three" />
114114

115115
<section className="single-screen__card launching-card">
116-
<img className="single-screen__logo" src={AKOFLOW_LOGO_URL} alt="AkoFlow" />
116+
<img className="single-screen__logo" src={AKOFLOW_LOGO_URL} alt="AkôFlow" />
117117

118118
<div className="single-screen__content single-screen__content--animated">
119-
<div className="single-screen__label">Launching AkoFlow</div>
119+
<div className="single-screen__label">Launching AkôFlow</div>
120120
<h1 className="single-screen__title">{titleText}</h1>
121121
</div>
122122

desktop/renderer/react/components/ReleaseStep.jsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@ import { AKOFLOW_BANNER_URL } from '../brandAssets.jsx';
33
export function ReleaseStep({ systemInfo }) {
44
return (
55
<div className="step-card step-card--release">
6-
<img className="release-image" src={AKOFLOW_BANNER_URL} alt="AkoFlow release banner" />
6+
<img className="release-image" src={AKOFLOW_BANNER_URL} alt="AkôFlow release banner" />
77
<div className="step-card__headline">Latest release ready</div>
88
<p className="step-card__text">
9-
We will pull the latest AkoFlow release image and build it locally. The environment is ready to continue.
9+
We will pull the latest AkôFlow release image and build it locally. The environment is ready to continue.
1010
</p>
1111
<div className="step-info">
1212
<span>Platform: {systemInfo?.platformLabel || 'Unknown'}</span>

desktop/renderer/react/components/WelcomeStep.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ export function WelcomeStep({ onStart }) {
44
return (
55
<div className="welcome-step">
66
<div className="welcome-step__brand">
7-
<img className="welcome-step__icon" src={AKOFLOW_LOGO_URL} alt="AkoFlow logo" />
7+
<img className="welcome-step__icon" src={AKOFLOW_LOGO_URL} alt="AkôFlow logo" />
88
</div>
99
<h2 className="welcome-step__title">Local release.</h2>
1010
<div className="welcome-step__chips">

0 commit comments

Comments
 (0)