"me-web?" 0.7.0: the name in quotes, copy buttons, and every translation rewritten in plain words
Build / Desktop, server and tools (push) Successful in 1m19s
Release / Every platform, the server, the release (push) Successful in 9m34s

- The name is now always written in quotation marks, each language with its own: “me-web?”, «me-web?», „me-web?“, « me-web? », 「me-web?」. Without them the question mark read as the end of a sentence. In Arabic, Hebrew and the other right-to-left languages the question mark no longer jumps to the wrong side of the name.
- Your addresses, your router, your network, the reverse name, the route and the code of a submission you sent now sit in a small box with a copy button, ready to paste into a message to your provider or anywhere else.
- Every translation except English and Italian was rewritten for people who are not technical: everyday words first, the technical term in brackets, and one word for one thing across the whole app. They are still machine drafts; "Suggest a correction" is welcome in any language.
- A few lines are plainer in English and Italian too: the test servers for calls, and the server in the middle that carries a call when two homes can't connect directly.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012CzABvBkbcFqoHdmi8b9WB
This commit is contained in:
thepraandClaude Opus 5.5 committed 2026-10-15 22:49:40 +02:00
1 parent d18caed157
commit 320936c688
260 files changed
+23662 -18072

No files matched your search

+7 -21
View File
@@ -2,42 +2,28 @@ using System.Net.Sockets;
using MeWeb.Shared;
using Microsoft.Extensions.Options;
namespace MeWeb.Server;
public class SiteOptions
{
public bool Node { get; set; }
}
public static class ServerApi
{
public static WebApplication MapMeWebApi(this WebApplication app)
{
app.MapGet(Endpoints.Server.GET_Info, Info);
app.MapGet(Endpoints.Server.GET_Ip, Ip);
app.MapGet(Endpoints.Downloads.GET_Page, Page);
app.MapGet(Endpoints.Downloads.GET_Privacy, Privacy);
app.MapGet(Endpoints.Downloads.GET_Platform, Download);
app.MapPost(Endpoints.Probe.POST_Ticket, Ticket);
app.MapPost(Endpoints.Probe.POST_Run, Run);
app.MapPost(Endpoints.Share.POST_Create, Share);
app.MapDelete(Endpoints.Share.DELETE_One, Unshare);
app.MapGet(Endpoints.Speed.GET_Down, Down);
app.MapPost(Endpoints.Speed.POST_Up, Up);
var web = app.MapGroup("").AddEndpointFilter(async (context, next) =>
Node(context.HttpContext) ? Results.Redirect(Endpoints.Base + context.HttpContext.Request.Path + context.HttpContext.Request.QueryString) : await next(context));
web.MapGet(Endpoints.Downloads.GET_Page, Page);
web.MapGet(Endpoints.Downloads.GET_Privacy, Privacy);
web.MapGet(Endpoints.Downloads.GET_Platform, Download);
var main = app.MapGroup("").AddEndpointFilter(async (context, next) => Node(context.HttpContext) ? Results.NotFound() : await next(context));
main.MapPost(Endpoints.Share.POST_Create, Share);
main.MapDelete(Endpoints.Share.DELETE_One, Unshare);
main.MapGet(Endpoints.Knowledge.GET_Manifest, KnowledgeManifest);
main.MapGet(Endpoints.Knowledge.GET_File, KnowledgeFile);
app.MapGet(Endpoints.Knowledge.GET_Manifest, KnowledgeManifest);
app.MapGet(Endpoints.Knowledge.GET_File, KnowledgeFile);
return app;
}
static bool Node(HttpContext context) => context.RequestServices.GetRequiredService<IOptionsMonitor<SiteOptions>>().CurrentValue.Node;
static IResult KnowledgeManifest(KnowledgeFeeder feeder) =>
feeder.Manifest() is { } manifest ? Results.Json(manifest, MeWebJsonContext.Default.ViewKnowledge) : Results.NotFound();