cybrkyd

My quiet writing area

 Sun, 06 Jul 2025 18:27 UTC
My quiet writing area
Image: CC BY 4.0 by cybrkyd

Of late, I am in that mood where I want to make something for myself. Whilst the tools I need are generally available in various forms, they always seem to miss something which I consider essential, or they are full of things which I don’t want, like adverts and AI.

Today’s project had definitely been on my mind a lot recently. I had heard about Calmly Writer and have previously played around in it as well as some others in the same category of distraction-free writing. However, none of these are perfect for my needs.

In fact, the real reason I wanted to make my own solution was to use LanguageTool via my browser’s plug-in, as well as to avoid having persistent cookies set by someone else’s tool.

Why LanguageTool

For my writing needs, nothing is better than LanguageTool. Nowadays, Grammarly requires a login to use, and many of the other tools do not provide corrections for punctuation in the same way that both LanguageTool and Grammarly do.

I have even attempted to add LanguageTool to LibreOffice, but find that the way it works is inferior to how it operates in the browser.

The quiet writing area

I’ve made a minimal HTML page for use locally, which features one large text box for the writing, along with a word and character counter. As I use Gedit almost exclusively to write, this implementation mimics the blank canvas I so enjoy brilliantly, with the bonus of having my grammar and punctuation checked. So much so that I wrote this entire post in it.

Make your own space

This version works in all browsers and can be run locally from your machine. Make a new empty file and name it quiet.html or your own preferred name, then copy and paste the code below into it.

Enjoy the serenity.

<!DOCTYPE html>
<html>
<head>
<style>
body {
    font-family:'sans-serif';
    text-align:center;
    background-color:#fff1e5;
}
h1 {
    font-size: 1.6rem;
    color:#807973;
}
textarea {
    font-family: 'sans-serif';
    font-size: 1.1rem;
    border: 1px solid #aaa;
    padding: 8px;
    box-sizing: border-box;
    background-color:#fff1e5;
}
textarea:focus {
    outline: none;
    border: 1px solid #aaa;
    box-shadow: 0 0 4px rgba(0,0,0,0.05);
}
#countContainer {
    margin-top: 10px;
    font-size: 0.9rem;
    color: #0f8e99;
    display: flex;
    justify-content: center;
    gap: 10px;
}
.clearing a {
    font-size: 0.9rem;
    color: #0f8e99;
    text-decoration: none;
}
</style>
</head>
<body>

<h1>The quiet writing area</h1>

<form>
  <textarea id="textbox" name="quiet" rows="30" cols="100"></textarea>
  <div id="countContainer">
    <div id="wordCount">0 words</div> |
    <div id="charCount">0 characters</div>
  </div>
  <div class="clearing">
    <a href="#" id="clearLink">Clear</a>
  </div>
</form>

<script>
const textarea = document.getElementById('textbox');
const charCount = document.getElementById('charCount');
const wordCount = document.getElementById('wordCount');

textarea.addEventListener('input', function() {
  const text = textarea.value;
  const characters = text.length;
  const words = text.trim().split(/\s+/).filter(Boolean).length;

  charCount.textContent = `${characters} character${characters !== 1 ? 's' : ''}`;
  wordCount.textContent = `${words} word${words !== 1 ? 's' : ''}`;
});

document.getElementById('clearLink').addEventListener('click', function(event) {
  event.preventDefault();
  textarea.value = '';
  charCount.textContent = '0 characters';
  wordCount.textContent = '0 words';
});
</script>

</body>
</html>
»
Tagged in:

Visitors: Loading...