diff --git a/src/main.rs b/src/main.rs
index 05244235292bf34b784120d3381a48b316e82882..d2c06741686da039f28d8c43b26c4203db5d71c9 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -370,26 +370,39 @@ use actix_web_flash_messages::IncomingFlashMessages;
 
 type GetResult = Result<HttpResponse, GetError>;
 
+#[derive(Serialize)]
+struct BaseContext {
+    logged_user: Option<LoggedUser>,
+    flash_messages: IncomingFlashMessages,
+    base_url: String,
+}
+
+fn get_base_context(
+    logged_user: Option<LoggedUser>,
+    flash_messages: IncomingFlashMessages,
+) -> BaseContext {
+    BaseContext {
+        logged_user,
+        flash_messages,
+        base_url: env::var("BASE_URL").expect("BASE_URL environment variable is not set"),
+    }
+}
+
 #[get("/login")]
 async fn get_login(
     flash_messages: IncomingFlashMessages,
     identity: Option<Identity>,
     hb: web::Data<Handlebars<'_>>,
 ) -> GetResult {
-    let logged_user = identity.and_then(|identity| get_identity(&identity));
+    let base = get_base_context(
+        identity.and_then(|identity| get_identity(&identity)),
+        flash_messages
+    );
     #[derive(Serialize)]
-    struct LoginContext {
-        logged_user: Option<LoggedUser>,
-        flash_messages: IncomingFlashMessages,
-        base_url: String,
-    }
+    struct Context { base: BaseContext }
     Ok(HttpResponse::Ok().body(hb.render(
         "login",
-        &LoginContext {
-            logged_user,
-            flash_messages,
-            base_url: env::var("BASE_URL").expect("BASE_URL environment variable is not set"),
-        },
+        &Context { base },
     )?))
 }
 
@@ -399,20 +412,15 @@ async fn get_me(
     identity: Identity,
     hb: web::Data<Handlebars<'_>>,
 ) -> GetResult {
-    let logged_user = require_identity(&identity)?;
+    let base = get_base_context(
+        Some(require_identity(&identity)?),
+        flash_messages
+    );
     #[derive(Serialize)]
-    struct MeContext {
-        logged_user: LoggedUser,
-        flash_messages: IncomingFlashMessages,
-        base_url: String,
-    }
+    struct Context { base: BaseContext }
     Ok(HttpResponse::Ok().body(hb.render(
         "me",
-        &MeContext {
-            logged_user,
-            flash_messages,
-            base_url: env::var("BASE_URL").expect("BASE_URL environment variable is not set"),
-        },
+        &Context { base },
     )?))
 }
 
@@ -519,6 +527,7 @@ async fn get_contest_by_id(
     request: HttpRequest,
 ) -> GetResult {
     let logged_user = require_identity(&identity)?;
+    let base = get_base_context(Some(require_identity(&identity)?), flash_messages);
 
     #[derive(Serialize)]
     struct FormattedProblemByContestWithScore {
@@ -533,13 +542,11 @@ async fn get_contest_by_id(
     }
 
     #[derive(Serialize)]
-    struct ContestContext {
+    struct Context {
+        base: BaseContext,
         contest: FormattedContest,
         problems: Vec<FormattedProblemByContestWithScore>,
         submissions: Vec<FormattedSubmission>,
-        logged_user: LoggedUser,
-        flash_messages: IncomingFlashMessages,
-        base_url: String,
     }
 
     let path = path.into_inner();
@@ -570,7 +577,8 @@ async fn get_contest_by_id(
     Ok(HttpResponse::Ok().body(
         hb.render(
             "contest",
-            &ContestContext {
+            &Context {
+                base,
                 contest: get_formatted_contest(&tz, &contest),
                 problems: problems
                     .iter()
@@ -592,9 +600,6 @@ async fn get_contest_by_id(
                         user_accepted_count: p.user_accepted_count,
                     })
                     .collect(),
-                logged_user,
-                flash_messages,
-                base_url: env::var("BASE_URL").expect("BASE_URL environment variable is not set"),
                 submissions: submissions
                     .iter()
                     .map(|(s, c, u)| format_submission(&tz, s, c, u))
@@ -618,6 +623,7 @@ async fn get_contest_scoreboard_by_id(
     request: HttpRequest,
 ) -> GetResult {
     let logged_user = require_identity(&identity)?;
+    let base = get_base_context(Some(require_identity(&identity)?), flash_messages);
 
     #[derive(Serialize)]
     struct FormattedProblemByContestWithScore {
@@ -640,13 +646,11 @@ async fn get_contest_scoreboard_by_id(
     }
 
     #[derive(Serialize)]
-    struct ScoreboardContext {
+    struct Context {
+        base: BaseContext,
         contest: FormattedContest,
         scores: Vec<Score>,
         submissions: Vec<FormattedSubmission>,
-        logged_user: LoggedUser,
-        flash_messages: IncomingFlashMessages,
-        base_url: String,
     }
 
     let path = path.into_inner();
@@ -719,12 +723,10 @@ async fn get_contest_scoreboard_by_id(
     Ok(HttpResponse::Ok().body(
         hb.render(
             "scoreboard",
-            &ScoreboardContext {
+            &Context {
+                base,
                 contest: get_formatted_contest(&tz, &contest),
                 scores,
-                logged_user,
-                flash_messages,
-                base_url: env::var("BASE_URL").expect("BASE_URL environment variable is not set"),
                 submissions: submissions
                     .iter()
                     .map(|(s, c, u)| format_submission(&tz, s, c, u))
@@ -747,6 +749,7 @@ async fn get_contest_problem_by_id_label(
     request: HttpRequest,
 ) -> GetResult {
     let logged_user = require_identity(&identity)?;
+    let base = get_base_context(Some(require_identity(&identity)?), flash_messages);
 
     #[derive(Serialize, Debug)]
     struct LanguageContext {
@@ -756,16 +759,14 @@ async fn get_contest_problem_by_id_label(
     }
 
     #[derive(Serialize)]
-    struct ContestProblemContext {
+    struct Context {
+        base: BaseContext,
         languages: Vec<LanguageContext>,
         language: Option<String>,
         contest: FormattedContest,
         problems: Vec<ProblemByContest>,
         problem: ProblemByContest,
         submissions: Vec<FormattedSubmission>,
-        flash_messages: IncomingFlashMessages,
-        base_url: String,
-        logged_user: LoggedUser,
     }
 
     let mut languages = languages
@@ -811,15 +812,13 @@ async fn get_contest_problem_by_id_label(
     Ok(HttpResponse::Ok().body(
         hb.render(
             "contest_problem",
-            &ContestProblemContext {
+            &Context {
+                base,
                 contest: get_formatted_contest(&tz, &contest),
                 languages,
                 problems,
                 problem,
-                flash_messages,
-                base_url: env::var("BASE_URL").expect("BASE_URL environment variable is not set"),
                 language: session.get("language")?,
-                logged_user,
                 submissions: submissions
                     .iter()
                     .map(|(s, c, u)| format_submission(&tz, s, c, u))
@@ -1028,6 +1027,7 @@ async fn get_submissions_me(
 
 #[get("/submissions/{uuid}")]
 async fn get_submission(
+    flash_messages: IncomingFlashMessages,
     identity: Identity,
     pool: web::Data<DbPool>,
     hb: web::Data<Handlebars<'_>>,
@@ -1035,6 +1035,7 @@ async fn get_submission(
     tz: web::Data<Tz>,
 ) -> GetResult {
     let logged_user = require_identity(&identity)?;
+    let base = get_base_context(Some(require_identity(&identity)?), flash_messages);
     let mut connection = pool.get()?;
 
     #[derive(Serialize)]
@@ -1054,10 +1055,9 @@ async fn get_submission(
     }
 
     #[derive(Serialize)]
-    struct SubmissionContext {
+    struct Context {
+        base: BaseContext,
         submission: Submission,
-        base_url: String,
-        logged_user: LoggedUser,
     }
 
     let path = path.into_inner();
@@ -1070,9 +1070,8 @@ async fn get_submission(
 
     Ok(HttpResponse::Ok().body(hb.render(
         "submission",
-        &SubmissionContext {
-            logged_user,
-            base_url: env::var("BASE_URL").expect("BASE_URL environment variable is not set"),
+        &Context {
+            base,
             submission: Submission {
                 uuid: submission.uuid,
                 verdict: submission.verdict,
@@ -1517,12 +1516,11 @@ async fn get_main(
     tz: web::Data<Tz>,
 ) -> GetResult {
     let logged_user = get_identity(&identity);
+    let base = get_base_context(get_identity(&identity), flash_messages);
 
     #[derive(Serialize)]
-    struct MainContext {
-        logged_user: Option<LoggedUser>,
-        flash_messages: IncomingFlashMessages,
-        base_url: String,
+    struct Context {
+        base: BaseContext,
         contests: Vec<FormattedContest>,
         submissions: Vec<FormattedSubmission>,
     }
@@ -1533,10 +1531,8 @@ async fn get_main(
     Ok(HttpResponse::Ok().body(
         hb.render(
             "main",
-            &MainContext {
-                flash_messages,
-                base_url: env::var("BASE_URL").expect("BASE_URL environment variable is not set"),
-                logged_user: logged_user.clone(),
+            &Context {
+                base,
                 contests: get_formatted_contests(&mut connection, logged_user.map(|u| u.id), &tz)?,
                 submissions: submissions
                     .iter()
@@ -1556,22 +1552,19 @@ async fn get_contests(
     tz: web::Data<Tz>,
 ) -> GetResult {
     let logged_user = require_identity(&identity)?;
+    let base = get_base_context(Some(require_identity(&identity)?), flash_messages);
 
     #[derive(Serialize)]
-    struct ContestsContext {
-        logged_user: LoggedUser,
-        flash_messages: IncomingFlashMessages,
-        base_url: String,
+    struct Context {
+        base: BaseContext,
         contests: Vec<FormattedContest>,
     }
 
     let mut connection = pool.get()?;
     Ok(HttpResponse::Ok().body(hb.render(
         "contests",
-        &ContestsContext {
-            logged_user: logged_user.clone(),
-            flash_messages,
-            base_url: env::var("BASE_URL").expect("BASE_URL environment variable is not set"),
+        &Context {
+            base,
             contests: get_formatted_contests(&mut connection, Some(logged_user.id), &tz)?,
         },
     )?))
diff --git a/templates/base.hbs b/templates/base.hbs
index c9cd859e68495fa04747acbea6657a2d2bdceb3d..42fd43a1db872ad084f3f8c27c2bedc80b322d03 100644
--- a/templates/base.hbs
+++ b/templates/base.hbs
@@ -1,9 +1,9 @@
 <!DOCTYPE html>
 <head>
   <title>Juĝisto · {{ title }}</title>
-  <base href="{{ base_url }}">
+  <base href="{{ base.base_url }}">
   <meta charset="utf-8"/>
-  <link rel="stylesheet" href="{{ base_url }}static/styles.css"/>
+  <link rel="stylesheet" href="static/styles.css"/>
   <link rel="stylesheet" data-name="vs/editor/editor.main" href="https://unpkg.com/monaco-editor@0.21.2/min/vs/editor/editor.main.css"/>
   <script src="https://unpkg.com/htmx.org@1.5.0"></script>
   <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css">
@@ -11,29 +11,29 @@
 </head>
 <body>
   <header>
-    <h1><a href="{{base_url}}">Juĝisto</a></h1>
+    <h1><a href=".">Juĝisto</a></h1>
     <nav>
-      <a href="{{base_url}}">Início</a>
-      <a href="{{base_url}}contests/">Competições</a>
-      <a href="{{base_url}}problems/">Problemas</a>
-      <a href="{{base_url}}submissions/">Submissões</a>
-      <a href="{{base_url}}setting/">Criações</a>
-      <a href="{{base_url}}about/">Sobre</a>
+      <a href=".">Início</a>
+      <a href="contests/">Competições</a>
+      <a href="problems/">Problemas</a>
+      <a href="submissions/">Submissões</a>
+      <a href="setting/">Criações</a>
+      <a href="about/">Sobre</a>
     </nav>
     <div class="span"></div>
     <div class="logged">
-      {{ #if logged_user }}
-        <a href="{{base_url}}me">{{ logged_user.name }}{{ #if logged_user.is_admin }} (administrador){{ /if }}</a>
-        <form id="logout-form" method="post" action="{{base_url}}logout">
+      {{ #if base.logged_user }}
+        <a href="me">{{ base.logged_user.name }}{{ #if base.logged_user.is_admin }} (administrador){{ /if }}</a>
+        <form id="logout-form" method="post" action="logout">
           <button type="submit">sair</button>
         </form>
       {{ else }}
-      <a href="{{base_url}}login">entrar</a>
+      <a href="login">entrar</a>
       {{ /if }}
     </div>
   </header>
-  {{ #if flash_messages }}
-  {{ #each flash_messages }}
+  {{ #if base.flash_messages }}
+  {{ #each base.flash_messages }}
   {{ #each this }}
     <div class="flash-message flash-{{ this.level }}">
       {{ this.content }}
diff --git a/templates/contest.hbs b/templates/contest.hbs
index 5070a8578c259f8c5fec7d899d2ea23f8964714d..b26f20efc405d0997c8a9302c4d18d415fde170d 100644
--- a/templates/contest.hbs
+++ b/templates/contest.hbs
@@ -1,20 +1,20 @@
 {{ #> base title="Competição" }}
   <div id="contest">
     <div id="breadcrumb">
-      <a href="{{base_url}}">Início</a>
+      <a href=".">Início</a>
       /
-      <a href="{{base_url}}contests/">Competições</a>
+      <a href="contests/">Competições</a>
       /
-      <a href="{{base_url}}contests/{{contest.id}}">{{contest.name}}</a>
+      <a href="contests/{{contest.id}}">{{contest.name}}</a>
       <div class="span"></div>
-      <a href="{{base_url}}contests/{{contest.id}}/scoreboard">
+      <a href="contests/{{contest.id}}/scoreboard">
         Ver Placar ►
       </a>
     </div>
 
     <div id="problems">
       {{ #each problems }}
-      <a href="{{base_url}}contests/{{ ../contest.id }}/{{ this.label }}" class="problem">
+      <a href="contests/{{ ../contest.id }}/{{ this.label }}" class="problem">
         <div class="problem-info">
           <div class="name">
             {{ this.label }} · {{ this.name }}
@@ -55,9 +55,9 @@
     </div>
   </div>
 
-  <div id="submissions" hx-sse="connect:{{base_url}}submission_updates/">
+  <div id="submissions" hx-sse="connect:submission_updates/">
     Submissões
-    <div id="submissions-list" hx-get="{{base_url}}submissions/me/contests/{{ contest.id }}" hx-trigger="load, sse:update_submission">
+    <div id="submissions-list" hx-get="submissions/me/contests/{{ contest.id }}" hx-trigger="load, sse:update_submission">
     {{> submissions }}
     </div>
   </div>
diff --git a/templates/contest_problem.hbs b/templates/contest_problem.hbs
index 897684e34a9accc3f67c4ea26e193c2e21f3759e..4853b0501cd36ee0e248726118b1beef529f33f6 100644
--- a/templates/contest_problem.hbs
+++ b/templates/contest_problem.hbs
@@ -1,18 +1,18 @@
 {{ #> base title="Competição" }}
   <div id="problem">
     <div id="breadcrumb">
-      <a href="{{base_url}}">Início</a>
+      <a href=".">Início</a>
       /
-      <a href="{{base_url}}contests/">Competições</a>
+      <a href="contests/">Competições</a>
       /
-      <a href="{{base_url}}contests/{{ contest.id }}">{{ contest.name }}</a>
+      <a href="contests/{{ contest.id }}">{{ contest.name }}</a>
       /
-      <a href="{{base_url}}contests/{{ contest.id }}/{{ problem.label }}">{{ problem.label }} · {{ problem.name }}</a>
+      <a href="contests/{{ contest.id }}/{{ problem.label }}">{{ problem.label }} · {{ problem.name }}</a>
     </div>
 
     <div id="statement-submission">
-      <iframe src="{{base_url}}problems/{{problem.id}}/assets/problem.html" id="statement"></iframe>
-      <form id="submission" method="post" action="{{base_url}}submissions/">
+      <iframe src="problems/{{problem.id}}/assets/problem.html" id="statement"></iframe>
+      <form id="submission" method="post" action="submissions/">
         <input type="hidden" name="contest_problem_id" value="{{ problem.id }}">
         <label for="language">Linguagem</label>
         <select id="language" name="language">
@@ -39,9 +39,9 @@
     </div>
   </div>
 
-  <div id="submissions" hx-sse="connect:{{base_url}}submission_updates/">
+  <div id="submissions" hx-sse="connect:submission_updates/">
     Submissões
-    <div id="submissions-list" hx-get="{{base_url}}submissions/me/contests/{{ contest.id }}/{{ problem.label }}" hx-trigger="load, sse:update_submission">
+    <div id="submissions-list" hx-get="submissions/me/contests/{{ contest.id }}/{{ problem.label }}" hx-trigger="load, sse:update_submission">
     {{> submissions }}
     </div>
   </div>
diff --git a/templates/contests.hbs b/templates/contests.hbs
index 0fca8dcb0c51d023b8f39b4d91546afe9b37cdc6..a209155d64de2734e1267547bfa941d47537303e 100644
--- a/templates/contests.hbs
+++ b/templates/contests.hbs
@@ -1,9 +1,9 @@
 {{#> base title="Competições"}}
   <div id="contests">
     <div id="breadcrumb">
-      <a href="{{base_url}}">Início</a>
+      <a href=".">Início</a>
       /
-      <a href="{{base_url}}contests/">Competições</a>
+      <a href="contests/">Competições</a>
     </div>
 
     <table>
@@ -18,18 +18,18 @@
       <tbody>
         {{ #each contests }}
         <tr>
-          <td><a href="{{base_url}}contests/{{ this.id }}">{{ this.name }}</a></td>
-          <td class="right"><a href="{{base_url}}contests/{{ this.id }}">{{ this.start_instant }}</a></td>
-          <td class="right"><a href="{{base_url}}contests/{{ this.id }}">{{ this.end_instant }}</a></td>
-          <td class="right"><a href="{{base_url}}contests/{{ this.id }}">{{ this.creation_instant }}</a></td>
+          <td><a href="contests/{{ this.id }}">{{ this.name }}</a></td>
+          <td class="right"><a href="contests/{{ this.id }}">{{ this.start_instant }}</a></td>
+          <td class="right"><a href="contests/{{ this.id }}">{{ this.end_instant }}</a></td>
+          <td class="right"><a href="contests/{{ this.id }}">{{ this.creation_instant }}</a></td>
         </tr>
         {{ /each }}
       </tbody>
     </table>
   </div>
 
-  {{#if logged_user.is_admin }}
-    <form id="create-contest-form" hx-target="body" hx-swap="innerHTML" hx-encoding="multipart/form-data" hx-post="{{base_url}}contests/">
+  {{#if base.logged_user.is_admin }}
+    <form id="create-contest-form" hx-target="body" hx-swap="innerHTML" hx-encoding="multipart/form-data" hx-post="contests/">
       <label for="name">
         Nome
       </label>
diff --git a/templates/login.hbs b/templates/login.hbs
index ae522224d868d926aa4235b999c6f94cb3ab0e57..45f6bee8da7b6cb7a049bc1c381581e861dea5d8 100644
--- a/templates/login.hbs
+++ b/templates/login.hbs
@@ -1,5 +1,5 @@
 {{ #> base title="Entrar" }}
-  <form type="submit" method="post" action="{{base_url}}login" id="login-form">
+  <form type="submit" method="post" action="login" id="login-form">
     <label for="name">
       Usuário
     </label>
diff --git a/templates/main.hbs b/templates/main.hbs
index 678817985679c4f977af865ac7c163b55c889f4a..e19e1f908e7a7a1002d398067fa9351d194b5e56 100644
--- a/templates/main.hbs
+++ b/templates/main.hbs
@@ -1,7 +1,7 @@
 {{ #> base title="Início" }}
   <div id="contests">
     {{ #each contests }}
-      <a href="{{base_url}}contests/{{ this.id }}" class="contest">
+      <a href="contests/{{ this.id }}" class="contest">
         <div class="contest-info">
           <div class="name">{{ this.name }}</div>
           <div class="extra">{{ this.start_instant }} — {{ this.end_instant }}</div>
@@ -33,10 +33,10 @@
     {{ /each }}
   </div>
 
-  {{#if logged_user.is_admin}}
-    <div id="submissions" hx-sse="connect:{{base_url}}submission_updates/">
+  {{#if base.logged_user.is_admin}}
+    <div id="submissions" hx-sse="connect:submission_updates/">
       Submissões
-      <div id="submissions-list" hx-get="{{base_url}}submissions/" hx-trigger="load, sse:update_submission">
+      <div id="submissions-list" hx-get="submissions/" hx-trigger="load, sse:update_submission">
       {{> submissions }}
       </div>
     </div>
diff --git a/templates/me.hbs b/templates/me.hbs
index 12f959aae46b0bd7259bd476a67e3a8ea6ab0091..929c9a035ef1dc0b920070bb0627b6c783c128ac 100644
--- a/templates/me.hbs
+++ b/templates/me.hbs
@@ -1,5 +1,5 @@
 {{#> base title="Eu"}}
-  <form id="change-password" method="post" action="{{base_url}}me/password">
+  <form id="change-password" method="post" action="me/password">
    <label for="old_password">
       Senha antiga
     </label>
@@ -17,8 +17,8 @@
     </button>
   </form>
 
-  {{#if logged_user.is_admin}}
-    <form id="create-user" method="post" action="{{base_url}}users/">
+  {{#if base.logged_user.is_admin}}
+    <form id="create-user" method="post" action="users/">
       <label for="name">
         Nome
       </label>
@@ -36,7 +36,7 @@
       </button>
     </form>
 
-    <form id="impersonate-user" method="post" action="{{base_url}}impersonate/">
+    <form id="impersonate-user" method="post" action="impersonate/">
       <label for="name">
         Nome
       </label>
diff --git a/templates/scoreboard.hbs b/templates/scoreboard.hbs
index 7576f17893a0415979c957eba2523ef1c0a083cd..f3cb6c9cbda1ce32229c1e1e3618de5398f22225 100644
--- a/templates/scoreboard.hbs
+++ b/templates/scoreboard.hbs
@@ -1,13 +1,13 @@
 {{ #> base title="Competição" }}
   <div id="contest">
     <div id="breadcrumb">
-      <a href="{{base_url}}">Início</a>
+      <a href=".">Início</a>
       /
-      <a href="{{base_url}}contests/">Competições</a>
+      <a href="contests/">Competições</a>
       /
-      <a href="{{base_url}}contests/{{contest.id}}">{{contest.name}}</a>
+      <a href="contests/{{contest.id}}">{{contest.name}}</a>
       /
-      <a href="{{base_url}}contests/{{contest.id}}/scoreboard">Placar</a>
+      <a href="contests/{{contest.id}}/scoreboard">Placar</a>
     </div>
 
     <div id="scoreboard">
@@ -72,9 +72,9 @@
     </div>
   </div>
 
-  <div id="submissions" hx-sse="connect:{{base_url}}submission_updates/">
+  <div id="submissions" hx-sse="connect:submission_updates/">
     Submissões
-    <div id="submissions-list" hx-get="{{base_url}}submissions/me/contests/{{ contest.id }}" hx-trigger="load, sse:update_submission">
+    <div id="submissions-list" hx-get="submissions/me/contests/{{ contest.id }}" hx-trigger="load, sse:update_submission">
     {{> submissions }}
     </div>
   </div>
diff --git a/templates/submission.hbs b/templates/submission.hbs
index 834f4bd72ac6d939b870fff99f188ee67753da29..189b3e13a04bc6e919dcd05910bfcc832d4d8171 100644
--- a/templates/submission.hbs
+++ b/templates/submission.hbs
@@ -16,10 +16,10 @@ function closeModal() {
     <div>Tempo de parede: {{submission.time_wall_ms}}ms</div>
     <div>Código-fonte:</div>
     <textarea class="source-text" readonly>{{submission.source_text}}</textarea>
-    {{#if logged_user.is_admin}}
+    {{#if base.logged_user.is_admin}}
       <div>Saída de erro:</div>
       <textarea class="error-output" readonly>{{submission.error_output}}</textarea>
-      <button hx-post="{{base_url}}submissions/{{submission.uuid}}/rejudge" hx-target="body">Rejulgar</button>
+      <button hx-post="submissions/{{submission.uuid}}/rejudge" hx-target="body">Rejulgar</button>
     {{/if}}
     <button onclick="closeModal()">Fechar</button>
   </div>
diff --git a/templates/submissions.hbs b/templates/submissions.hbs
index 7d54057b69b3bd4464ae920414c7010b2be6a186..5a7b443ed2a755bc0cf85511dc9edff8b86478da 100644
--- a/templates/submissions.hbs
+++ b/templates/submissions.hbs
@@ -1,37 +1,37 @@
 {{ #each submissions }}
 {{ #if (eq this.verdict "WJ") }}
-<div id="submission-{{ this.uuid }}" class="submission waiting-judge" hx-get="{{../base_url}}submissions/{{this.uuid}}" hx-target="body" hx-swap="beforeend">
+<div id="submission-{{ this.uuid }}" class="submission waiting-judge" hx-get="submissions/{{this.uuid}}" hx-target="body" hx-swap="beforeend">
   <div class="uuid">{{ this.uuid }}</div>
   <div class="description">
     <div class="lds-hourglass"></div>
     <div class="verdict">WJ</div> · {{ this.problem_label }} · {{ this.submission_instant }}
   </div>
   <div class="extra-info">
-    {{#if ../logged_user.is_admin}} {{this.user_name}} {{/if}}
+    {{#if ../base.logged_user.is_admin}} {{this.user_name}} {{/if}}
   </div>
 </div>
 {{ /if }}
 {{ #if (eq this.verdict "AC") }}
-<div id="submission-{{ this.uuid }}" class="submission accepted" hx-get="{{../base_url}}submissions/{{this.uuid}}" hx-target="body" hx-swap="beforeend">
+<div id="submission-{{ this.uuid }}" class="submission accepted" hx-get="submissions/{{this.uuid}}" hx-target="body" hx-swap="beforeend">
   <div class="uuid">{{ this.uuid }}</div>
   <div class="description">
     <div class="verdict">AC</div> · {{ this.problem_label }} · {{ this.submission_instant }}
   </div>
   <div class="extra-info">
     {{this.time_ms}}ms {{#if this.memory}} · {{this.memory}}{{/if}}
-    {{#if ../logged_user.is_admin}} · {{this.user_name}} {{/if}}
+    {{#if ../base.logged_user.is_admin}} · {{this.user_name}} {{/if}}
   </div>
 </div>
 {{ /if }}
 {{ #if (eq this.verdict "WA") }}
-<div id="submission-{{ this.uuid }}" class="submission wrong-answer" hx-get="{{../base_url}}submissions/{{this.uuid}}" hx-target="body" hx-swap="beforeend">
+<div id="submission-{{ this.uuid }}" class="submission wrong-answer" hx-get="submissions/{{this.uuid}}" hx-target="body" hx-swap="beforeend">
   <div class="uuid">{{ this.uuid }}</div>
   <div class="description">
     <div class="verdict">WA</div> · {{ this.problem_label }} · {{ this.submission_instant }}
   </div>
   <div class="extra-info">
     {{this.time_ms}}ms {{#if this.memory}} · {{this.memory}}{{/if}}
-    {{#if ../logged_user.is_admin}} · {{this.user_name}} {{/if}}
+    {{#if ../base.logged_user.is_admin}} · {{this.user_name}} {{/if}}
   </div>
   {{#if this.failed_test}}
     <div class="failed-test">
@@ -42,34 +42,34 @@
 </div>
 {{ /if }}
 {{ #if (eq this.verdict "RE") }}
-<div id="submission-{{ this.uuid }}" class="submission runtime-error" hx-get="{{../base_url}}submissions/{{this.uuid}}" hx-target="body" hx-swap="beforeend">
+<div id="submission-{{ this.uuid }}" class="submission runtime-error" hx-get="submissions/{{this.uuid}}" hx-target="body" hx-swap="beforeend">
   <div class="uuid">{{ this.uuid }}</div>
   <div class="description">
     <div class="verdict">RE</div> · {{ this.problem_label }} · {{ this.submission_instant }}
   </div>
   <div class="extra-info">
     {{this.time_ms}}ms {{#if this.memory}} · {{this.memory}}{{/if}}
-    {{#if ../logged_user.is_admin}} · {{this.user_name}} {{/if}}
+    {{#if ../base.logged_user.is_admin}} · {{this.user_name}} {{/if}}
   </div>
   {{#if this.failed_test}}
     <div class="failed-test">
       Falhou no teste {{this.failed_test}}
     </div>
   {{/if}}
-  {{#if ../logged_user.is_admin}}
+  {{#if ../base.logged_user.is_admin}}
   <div class="compilation-result">{{ this.error_output }}</div>
   {{/if}}
 </div>
 {{ /if }}
 {{ #if (eq this.verdict "ML") }}
-<div id="submission-{{ this.uuid }}" class="submission memory-limit" hx-get="{{../base_url}}submissions/{{this.uuid}}" hx-target="body" hx-swap="beforeend">
+<div id="submission-{{ this.uuid }}" class="submission memory-limit" hx-get="submissions/{{this.uuid}}" hx-target="body" hx-swap="beforeend">
   <div class="uuid">{{ this.uuid }}</div>
   <div class="description">
     <div class="verdict">ML</div> · {{ this.problem_label }} · {{ this.submission_instant }}
   </div>
   <div class="extra-info">
     {{this.time_ms}}ms {{#if this.memory}} · {{this.memory}}{{/if}}
-    {{#if ../logged_user.is_admin}} · {{this.user_name}} {{/if}}
+    {{#if ../base.logged_user.is_admin}} · {{this.user_name}} {{/if}}
   </div>
   {{#if this.failed_test}}
     <div class="failed-test">
@@ -79,14 +79,14 @@
 </div>
 {{ /if }}
 {{ #if (eq this.verdict "TL") }}
-<div id="submission-{{ this.uuid }}" class="submission time-limit" hx-get="{{../base_url}}submissions/{{this.uuid}}" hx-target="body" hx-swap="beforeend">
+<div id="submission-{{ this.uuid }}" class="submission time-limit" hx-get="submissions/{{this.uuid}}" hx-target="body" hx-swap="beforeend">
   <div class="uuid">{{ this.uuid }}</div>
   <div class="description">
     <div class="verdict">TL</div> · {{ this.problem_label }} · {{ this.submission_instant }}
   </div>
   <div class="extra-info">
     {{this.time_ms}}ms {{#if this.memory}} · {{this.memory}}{{/if}}
-    {{#if ../logged_user.is_admin}} · {{this.user_name}} {{/if}}
+    {{#if ../base.logged_user.is_admin}} · {{this.user_name}} {{/if}}
   </div>
   {{#if this.failed_test}}
     <div class="failed-test">
@@ -96,13 +96,13 @@
 </div>
 {{ /if }}
 {{ #if (eq this.verdict "CE") }}
-<div id="submission-{{ this.uuid }}" class="submission compilation-error" hx-get="{{../base_url}}submissions/{{this.uuid}}" hx-target="body" hx-swap="beforeend">
+<div id="submission-{{ this.uuid }}" class="submission compilation-error" hx-get="submissions/{{this.uuid}}" hx-target="body" hx-swap="beforeend">
   <div class="uuid">{{ this.uuid }}</div>
   <div class="description">
     <div class="verdict">CE</div> · {{ this.problem_label }} · {{ this.submission_instant }}
   </div>
   <div class="compilation-result">{{ this.error_output }}</div>
-  {{#if ../logged_user.is_admin}}
+  {{#if ../base.logged_user.is_admin}}
     <div class="extra-info">
       {{this.time_ms}}ms {{#if this.memory}} · {{this.memory}}{{/if}}
        · {{this.user_name}}