Skip to content
Open
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
10 changes: 5 additions & 5 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ jobs:
workspaces: ". -> target"

- name: Run server tests
run: cargo test -p notto-server
run: cargo test -p nooto-server

test-rust-client:
name: Rust Client Tests
Expand Down Expand Up @@ -50,7 +50,7 @@ jobs:
workspaces: ". -> target"

- name: Run client tests
run: cargo test -p notto
run: cargo test -p nooto

test-frontend:
name: Frontend Tests
Expand All @@ -62,12 +62,12 @@ jobs:
with:
node-version: 22
cache: npm
cache-dependency-path: notto-client/package-lock.json
cache-dependency-path: client/package-lock.json

- name: Install dependencies
working-directory: notto-client
working-directory: client
run: npm ci

- name: Run Vitest
working-directory: notto-client
working-directory: client
run: npm test
12 changes: 6 additions & 6 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ git checkout -b claude-dev # Create and switch to claude-dev branch

## Project Overview

Notto is an end-to-end encrypted note-taking application built with:
Nooto is an end-to-end encrypted note-taking application built with:
- **Client**: Tauri v2 desktop app (Rust backend + React frontend with TypeScript)
- **Server**: Axum HTTP server for sync
- **Database**: MariaDB (server), SQLite (client)
Expand All @@ -23,7 +23,7 @@ Notto is an end-to-end encrypted note-taking application built with:

### Frontend (Tauri Client)
```bash
cd notto-client
cd nooto-client
npm install # Install dependencies
npm run tauri dev # Run development mode
npm run build # Build TypeScript
Expand All @@ -32,7 +32,7 @@ npm run tauri build # Build production app

### Backend (Sync Server)
```bash
cd notto-server
cd server
cargo run # Run development server (listens on 0.0.0.0:3000)
cargo build --release # Build production binary
```
Expand All @@ -44,7 +44,7 @@ docker-compose up # Start MariaDB and Adminer (port 8080)
docker-compose down # Stop services
```

Database connection string must be set in `notto-server/.env` as `DATABASE_URL`.
Database connection string must be set in `server/.env` as `DATABASE_URL`.

### Workspace Commands
From project root:
Expand All @@ -58,8 +58,8 @@ cargo test # Run tests for all crates
### Workspace Structure
This is a Cargo workspace with three members:
- `shared/`: Common types and structs shared between client and server
- `notto-client/src-tauri/`: Tauri backend (Rust)
- `notto-server/`: HTTP sync server (Axum)
- `client/src-tauri/`: Tauri backend (Rust)
- `server/`: HTTP sync server (Axum)

### Client Architecture (Tauri)

Expand Down
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
[workspace]
resolver = "3"
members = ["shared", "notto-client/src-tauri", "notto-server"]
members = ["shared", "client/src-tauri", "server"]
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Notto
# Nooto

See [Technical infos](./technical_infos.md) file for more informations on what I'm building.

Expand Down
4 changes: 2 additions & 2 deletions notto-client/index.html → client/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/notto.svg" />
<link rel="icon" type="image/svg+xml" href="/nooto.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Notto</title>
<title>Nooto</title>
</head>

<body>
Expand Down
4 changes: 2 additions & 2 deletions notto-client/package-lock.json → client/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion notto-client/package.json → client/package.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"name": "notto",
"name": "nooto",
"private": true,
"version": "0.1.0",
"type": "module",
Expand Down
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[package]
name = "notto"
name = "nooto"
version = "0.0.15"
description = "A Tauri App"
authors = ["Clément Pera"]
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/src/main/java/com/notto/app/generated
/src/main/java/com/nooto/app/generated
/src/main/jniLibs/**/*.so
/src/main/assets/tauri.conf.json
/tauri.build.gradle.kts
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@ val tauriProperties = Properties().apply {

android {
compileSdk = 36
namespace = "com.notto.app"
namespace = "com.nooto.app"
defaultConfig {
manifestPlaceholders["usesCleartextTraffic"] = "false"
applicationId = "com.notto.app"
applicationId = "com.nooto.app"
minSdk = 24
targetSdk = 36
versionCode = tauriProperties.getProperty("tauri.android.versionCode", "1").toInt()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
<application
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.notto"
android:theme="@style/Theme.nooto"
android:usesCleartextTraffic="${usesCleartextTraffic}">
<activity
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|smallestScreenSize|screenLayout|uiMode"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.notto.app
package com.nooto.app

import android.os.Bundle
import androidx.activity.enableEdgeToEdge
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
/* THIS FILE IS AUTO-GENERATED. DO NOT MODIFY!! */

// Copyright 2020-2023 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT

@file:Suppress("unused")

package com.notto.app

import android.webkit.*

class Ipc(val webViewClient: RustWebViewClient) {
@JavascriptInterface
fun postMessage(message: String?) {
message?.let {m ->
// we're not using WebView::getUrl() here because it needs to be executed on the main thread
// and it would slow down the Ipc
// so instead we track the current URL on the webview client
this.ipc(webViewClient.currentUrl, m)
}
}

companion object {
init {
System.loadLibrary("notto_lib")
}
}

private external fun ipc(url: String, message: String)


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
/* THIS FILE IS AUTO-GENERATED. DO NOT MODIFY!! */

// Copyright 2020-2023 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT

@file:Suppress("unused", "MemberVisibilityCanBePrivate")

package com.notto.app

// taken from https://github.com/ionic-team/capacitor/blob/6658bca41e78239347e458175b14ca8bd5c1d6e8/android/capacitor/src/main/java/com/getcapacitor/Logger.java

import android.text.TextUtils
import android.util.Log

class Logger {
companion object {
private const val LOG_TAG_CORE = "Tauri"

fun tags(vararg subtags: String): String {
return if (subtags.isNotEmpty()) {
LOG_TAG_CORE + "/" + TextUtils.join("/", subtags)
} else LOG_TAG_CORE
}

fun verbose(message: String) {
verbose(LOG_TAG_CORE, message)
}

private fun verbose(tag: String, message: String) {
if (!shouldLog()) {
return
}
Log.v(tag, message)
}

fun debug(message: String) {
debug(LOG_TAG_CORE, message)
}

fun debug(tag: String, message: String) {
if (!shouldLog()) {
return
}
Log.d(tag, message)
}

fun info(message: String) {
info(LOG_TAG_CORE, message)
}

fun info(tag: String, message: String) {
if (!shouldLog()) {
return
}
Log.i(tag, message)
}

fun warn(message: String) {
warn(LOG_TAG_CORE, message)
}

fun warn(tag: String, message: String) {
if (!shouldLog()) {
return
}
Log.w(tag, message)
}

fun error(message: String) {
error(LOG_TAG_CORE, message, null)
}

fun error(message: String, e: Throwable?) {
error(LOG_TAG_CORE, message, e)
}

fun error(tag: String, message: String, e: Throwable?) {
if (!shouldLog()) {
return
}
Log.e(tag, message, e)
}

private fun shouldLog(): Boolean {
return BuildConfig.DEBUG
}
}
}
Loading