style(org): use literal space in file: link targets master
authorSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Sat, 27 Jun 2026 15:36:47 +0000 (18:36 +0300)
committerSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Sat, 27 Jun 2026 15:36:47 +0000 (18:36 +0300)
396 [[file:…%20…]] link targets across 31 project pages were

rewritten to use a literal space instead of %20-encoding. Both

forms are accepted by org and browsers, but the project convention

is now literal space for file: links.

https: and mailto: links still use %20 where the URL path or query

string contains a space — that's mandatory per RFC 3986, and no such

links in the project had a literal space to fix. The 108 https: and

31 mailto: links in the project are unchanged.

AGENTS.org is updated to document the new rule: file: links use

literal space; https: and mailto: links use %20; the do-not-

normalise warning is replaced with the actual rule.

22 files changed:
AGENTS.org
Cases/Fuji XC15-45mm lens case/index.org
Cases/Fuji XC50-230mm lens case/index.org
Cases/Fujifilm camera battery box/index.org
Cases/Macro filter storage compartment/index.org
Cases/Meiqqm portable dosimeter case/index.org
Cases/Microscope slide box/index.org
Cases/NanoVNA case/index.org
Cases/Roll/index.org
Cases/USB cable terminals/index.org
Furniture/Book stand/index.org
Miscellaneous/12V Lead-Acid battery changer and terminal/index.org
Miscellaneous/Adjustable resistor/index.org
Miscellaneous/Alternative USB layout/index.org
Miscellaneous/Battery tester/index.org
Miscellaneous/Headphone hub/index.org
Miscellaneous/Portable stereo active speaker/index.org
Miscellaneous/USB desk fan mod/index.org
Miscellaneous/Window fixator/index.org
Optics/35mm film copying device/index.org
Optics/Fujifilm X-mount microscope adapter/index.org
Optics/Gyro for binoculars/index.org

index b43c843..cf50538 100644 (file)
@@ -94,14 +94,211 @@ bullets to =-= or vice versa — they are equivalent.
 
 ** Links
 
-- Internal project references in =index.org= use *URL-encoded* paths:
-  =[[file:Cases/Roll/index.html]]= becomes
-  =Cases/roll/index.html= → =Cases/Roll/index.html= in source. Spaces in
-  directory names are percent-encoded (=%20=).
-- Cross-references between project pages use raw =file:= links with the
-  same encoding rules.
-- The back-link in every page's front matter uses an HTML anchor fragment
-  pointing into =index.html=.
+- Internal project references in =index.org= use paths with *literal
+  spaces* in directory names. Spaces in URL-bearing link types
+  (https, mailto) must be =%20=-encoded (see "Link patterns" below).
+- Cross-references between project pages use raw =file:= links.
+- The back-link in every page's front matter uses an HTML anchor
+  fragment pointing into =index.html=.
+
+** Link patterns
+
+Five link shapes are used in the project. Stick to these — no new
+variations.
+
+*Spaces in filenames.* Filenames and directory names in this project
+often contain spaces (e.g. =Body and covers/foo.png=,
+=Spray gun holder/index.html=). Use a *literal space* in the link
+target — org and the browser both handle it correctly:
+
+#+begin_example
+,#+attr_html: :class responsive-img
+[[file:Body and covers/body, 1.png]]
+#+end_example
+
+*Exception: =https:= and =mailto:= links must use =%20= for any space in
+the path or query string.* A literal space in a URL is invalid (per
+RFC 3986) and the link will be malformed or rejected by browsers. So:
+
+#+begin_example
+[[https://example.com/path%20with%20space][Product page]]
+#+end_example
+
+But for =file:= links, literal space is correct and =%20= is *not*
+required. (The form =[[file:Body%20and%20covers/x.png]]= also works in
+practice — browsers and org both decode it back to a space — but the
+project convention is literal space.)
+
+1. *Image* — a PNG/JPG/etc. that the renderer shows inline. Always
+   preceded by =#+attr_html: :class responsive-img= so the page CSS
+   sizes it correctly. Spaces in the path are literal:
+
+   #+begin_example
+   ,#+attr_html: :class responsive-img
+   [[file:make.png]]
+   #+end_example
+
+   #+begin_example
+   ,#+attr_html: :class responsive-img
+   [[file:Body and covers/body, 1.png]]
+   #+end_example
+
+2. *Download* — a link to a FreeCAD project or STL file. The link
+   text is the file type, not the filename. Spaces in the path are
+   literal; spaces in the display text ([...]) need no encoding:
+
+   #+begin_example
+   - [[file:body.stl][STL file]]
+   - [[file:body.FCStd][FreeCAD project]]
+   - [[file:Lab heater and cooler.FCStd][FreeCAD design file]]
+   #+end_example
+
+3. *External URL* — auto-labelled (org uses the URL as the link text)
+   or explicitly labelled. Both are common. *Spaces in the URL must
+   be =%20=-encoded* — unlike =file:= links, raw spaces are not valid
+   in a URL:
+
+   #+begin_example
+   https://example.com/page
+   [[https://example.com/path%20with%20space][Product page]]
+   #+end_example
+
+4. *Email* — always use the =mailto://= form (note the double slash).
+   This is what every existing page uses, even though the standard
+   org form is =mailto:= (single slash). Don't "fix" the existing
+   pages. Email addresses don't contain spaces, so no encoding is
+   needed:
+
+   #+begin_example
+   [[mailto://svjatoslav@svjatoslav.eu][svjatoslav@svjatoslav.eu]]
+   #+end_example
+
+5. *Back-link* — top of every page, points to the index section
+   listing the project. The anchor fragment never contains spaces
+   (org's auto-generated IDs are hyphenated), so no encoding is
+   needed here. Anchor values that are actually used in the repo:
+
+   | Anchor                                  | Used for                            |
+   |-----------------------------------------+-------------------------------------|
+   | =outline-container-optics=              | Optics/ projects                    |
+   | =outline-container-furniture=           | Furniture/ projects                 |
+   | =outline-container-miscellaneous=       | Most Miscellaneous/ projects        |
+   | =outline-container-cable-wire=          | Cable/wire Miscellaneous/ projects  |
+   | =outline-container-audio=               | Audio Miscellaneous/ projects       |
+   | =outline-container-cases-optics=        | Some Cases/ + Optics/ cross-section |
+   | =outline-container-measurement-device-cases= | A specific Cases/ subsection   |
+
+   To find the correct anchor for a new page, run =Tools/Update web
+   site --force= once, then search the published =index.html= for
+   the section name; the =id="outline-container-..."= attribute
+   on the matching =<h2>= (or =<h3>=) is the anchor.
+
+** Page structure variations
+
+The "Per-page section template" above describes the top-level shape
+(Overview → optional middle sections → Repository). Within those
+sections, three sub-patterns recur and are accepted:
+
+- *Inline part headings* (=*Body*= / =*Cover*=): a project with two
+  physical parts uses single-asterisk emphasis headings inside
+  =* Overview= to split the description, instead of a top-level
+  =* Files= section. Each inline heading is followed by an
+  =#+attr_html= + image paragraph:
+
+  #+begin_example
+  ,*Body*
+  ,#+attr_html: :class responsive-img
+  [[file:body.png]]
+
+  ,*Cover*
+  ,#+attr_html: :class responsive-img
+  [[file:cover.png]]
+  #+end_example
+
+  Real examples: =Cases/Microscope slide box/=,
+  =Miscellaneous/Battery tester/=, =Cases/Macro filter storage
+  compartment/=.
+
+- *Download table* — for projects with multiple parts, a three-column
+  org table makes the FreeCAD/STL downloads scannable:
+
+  #+begin_example
+  | item  | FreeCAD file | STL file |
+  |-------+--------------+----------|
+  | body  | [[file:body.FCStd][download]]     | [[file:body.stl][download]] |
+  | cover | [[file:cover.FCStd][download]]     | [[file:cover.stl][download]] |
+  #+end_example
+
+- *Project-specific "See also:"* — a paragraph at the end of
+  =* Overview= that points to a related project, distinct from the
+  generic See-also list in =* Repository=:
+
+  #+begin_example
+  See also:
+  + [[file:../../Optics/Fujifilm X-mount microscope adapter/][Fujifilm microscope adapter]]
+  #+end_example
+
+  Use this when one project logically leads to another (e.g. "Case
+  for microscope slides" → "Microscope adapter").
+
+** Anti-patterns to avoid
+
+These have come up while maintaining the project. Each one was
+either a published-site bug or a verification false positive.
+
+- *Bullet-wrapped images.* A gallery image must be a bare paragraph
+  under an =#+attr_html= directive, not a list item:
+
+  #+begin_example
+  WRONG (bullet + image):
+  + Body:
+    + [[file:body.png]]
+
+  RIGHT (heading + image):
+  ** Body
+  ,#+attr_html: :class responsive-img
+  [[file:body.png]]
+  #+end_example
+
+  The bullet form renders as a bullet point around a single image in
+  the published HTML (looks like junk), and the =responsive-img=
+  class is lost because org doesn't apply attribute lines to
+  bullet-item content.
+
+- *=schematic= is ambiguous.* In some projects (e.g. =Miscellaneous/USB
+  desk fan mod=) =schematic= is a *directory* (containing KiCad
+  files like =DCDC_stepdown.sch=). In other projects, the link is
+  to a *file* called =schematic.png= at the project root. Don't
+  blindly rewrite =schematic= → =Schematic= in a link without
+  checking whether the original was a directory or a filename.
+  When renaming, use the =(^|/)old(/|$)= anchor in your search
+  regex to match directory components only.
+
+- *Lowercase-starting directory names.* Every directory in the
+  project starts with an uppercase letter (or a digit followed by
+  an uppercase letter). The rule applies to *directory* names, not
+  to filenames inside them. Files like =main board, 1.png= or
+  =schematic.png= are content and should not be renamed.
+
+** Workflow footnotes
+
+- =touch= does not invalidate the build cache. The incremental
+  export script (see "Build cache" below) keys on =sha256=, and
+  =touch= only updates mtime. If you want to test the sentinel
+  invalidation path, modify the file's content (e.g. =echo "" >>
+  style.css=), don't =touch= it.
+
+- The build script excludes =AGENTS.org= from exports (see commit
+  =f1187e6= "feat(build): incremental org→html export with
+  style.css sentinel"). The operating guide is for agents, not for
+  the public site, and a published =AGENTS.html= would be noise.
+
+- =./Tools/Update web site= re-opens itself in a =gnome-terminal=
+  the first time it's run (the "T" arg is the internal signal
+  meaning "we're already inside the terminal"). If you're running
+  the script from a script or over SSH without a display, the
+  re-open will fail — invoke the script with a "T" arg (e.g.
+  =./Tools/Update\ web\ site T --force=) to skip the re-launch.
 
 * Adding a new project
 
index 4a9fc31..20e9622 100644 (file)
@@ -30,15 +30,15 @@ Schematic assembled:
 [[file:assembled.png]]
 
 - see also:
-  - [[file:../Fuji%20XC50-230mm%20lens%20case/][Fujifilm XC50-230mm lens case]]
-  - [[file:../Fujifilm%20camera%20battery%20box/][Fujifilm camera battery box]]
+  - [[file:../Fuji XC50-230mm lens case/][Fujifilm XC50-230mm lens case]]
+  - [[file:../Fujifilm camera battery box/][Fujifilm camera battery box]]
 
 * Files
 :PROPERTIES:
 :CUSTOM_ID: fuji-xc15-45mm-lens-case-files
 :END:
 
-You can [[file:Fuji%20camera%20lens%20container.FCStd][download FreeCAD project]] file to tweak design or generated STL
+You can [[file:Fuji camera lens container.FCStd][download FreeCAD project]] file to tweak design or generated STL
 files ready for 3D printing:
 
 Body: [[file:body.stl][body.stl]]
index 48a9a25..f62fbae 100644 (file)
@@ -33,7 +33,7 @@ Schematic assembled:
 :CUSTOM_ID: fuji-xc50-230mm-lens-case-files
 :END:
 
-You can [[file:Fuji%20camera%20lens%20container.FCStd][download FreeCAD project]] file to tweak design or generated STL
+You can [[file:Fuji camera lens container.FCStd][download FreeCAD project]] file to tweak design or generated STL
 files ready for 3D printing:
 
 Body: [[file:body.stl][body.stl]]
index 660b932..0b25d34 100644 (file)
@@ -28,7 +28,7 @@ Design utilizes [[https://www.amazon.de/gp/product/B00TACKU0O/][3mm x 2mm thick
 :PROPERTIES:
 :CUSTOM_ID: fujifilm-camera-battery-box-files
 :END:
-You can [[file:body%20and%20cover.FCStd][download FreeCAD project]] file to tweak design or generated STL
+You can [[file:body and cover.FCStd][download FreeCAD project]] file to tweak design or generated STL
 files ready for 3D printing:
 
 + Body: [[file:body.stl][download STL]]
index 7673a0f..88d51d5 100644 (file)
@@ -40,7 +40,7 @@ Download:
 | cover | [[file:cover.FCStd][download]]     | [[file:cover.stl][download]] |
 
 See also:
-+ [[file:../Fujifilm%20camera%20battery%20box/index.html][Fujifilm camera battery box]]
++ [[file:../Fujifilm camera battery box/index.html][Fujifilm camera battery box]]
 
 * Repository
 
index 3dcfce2..e942315 100644 (file)
@@ -30,7 +30,7 @@ To better protect its display (for portable use), simple case have
 been made:
 
 #+attr_html: :class responsive-img
-[[file:Meiqqm%20portable%20dosimeter%20case.png]]
+[[file:Meiqqm portable dosimeter case.png]]
 
 Case has internally small bumps on the sides. It is suggested to
 insert device with the front panel towards the bump. Bumps are to
@@ -38,8 +38,8 @@ ensure that screen and buttons are not scratched by the case.
 
 Download:
 
-- [[file:Meiqqm%20portable%20dosimeter%20case.stl][STL file]]
-- [[file:Meiqqm%20portable%20dosimeter%20case.FCStd][FreeCAD project]]
+- [[file:Meiqqm portable dosimeter case.stl][STL file]]
+- [[file:Meiqqm portable dosimeter case.FCStd][FreeCAD project]]
 
 * Repository
 
index 4a5b3df..4600ea1 100644 (file)
@@ -47,7 +47,7 @@ Download:
 | cover | [[file:cover.FCStd][download]]     | [[file:cover.stl][download]] |
 
 See also:
-+ [[file:../../Optics/Fujifilm%20X-mount%20microscope%20adapter/][Fujifilm microscope adapter]]
++ [[file:../../Optics/Fujifilm X-mount microscope adapter/][Fujifilm microscope adapter]]
 
 * Repository
 
index 8e40267..4424453 100644 (file)
@@ -60,7 +60,7 @@ Cover attaches to the body using [[https://www.amazon.de/gp/product/B00TACKU0O/]
 CAD drawing for inner box/case:
 
 #+attr_html: :class responsive-img
-[[file:inner%20body%20assembled.png]]
+[[file:inner body assembled.png]]
 
 CAD drawing for inner box/case within outer box:
 
@@ -95,33 +95,33 @@ case.
 -----
 
 #+attr_html: :class responsive-img
-[[file:inner%20box.stl][download: inner box]]
+[[file:inner box.stl][download: inner box]]
 
 #+attr_html: :class responsive-img
-[[file:inner%20box,%201.png]]
+[[file:inner box, 1.png]]
 #+attr_html: :class responsive-img
-[[file:inner%20box,%202.png]]
+[[file:inner box, 2.png]]
 
 -----
 
 #+attr_html: :class responsive-img
-[[file:inner%20cover.stl][download: inner cover]]
+[[file:inner cover.stl][download: inner cover]]
 #+attr_html: :class responsive-img
-[[file:inner%20cover.png]]
+[[file:inner cover.png]]
 
 -----
 
 #+attr_html: :class responsive-img
-[[file:outer%20box.stl][download: outer box]]
+[[file:outer box.stl][download: outer box]]
 #+attr_html: :class responsive-img
-[[file:outer%20box.png]]
+[[file:outer box.png]]
 
 -----
 
 #+attr_html: :class responsive-img
-[[file:outer%20cover.stl][download: outer cover]]
+[[file:outer cover.stl][download: outer cover]]
 #+attr_html: :class responsive-img
-[[file:outer%20cover.png]]
+[[file:outer cover.png]]
 
 -----
 
@@ -136,7 +136,7 @@ case.
 :END:
 Files can be edited using [[https://www.freecadweb.org/][FreeCAD]].
 
-+ [[file:NanoVNA%20case.FCStd][NanoVNA case]]
++ [[file:NanoVNA case.FCStd][NanoVNA case]]
 + [[file:stylus.FCStd][Stylus]]
 
 * Repository
index ea55f38..ff5c511 100644 (file)
@@ -47,9 +47,9 @@ overhangs that are hard to print.
 #+attr_html: :class responsive-img
 [[file:Roll 27mm/roll 27mm, assembled, 2.png]]
 
-- [[file:roll%2027mm,%20body.stl][body STL]]
-- [[file:roll%2027mm,%20cover.stl][cover STL]]
-- [[file:roll%2027mm.FCStd][FreeCAD file]]
+- [[file:roll 27mm, body.stl][body STL]]
+- [[file:roll 27mm, cover.stl][cover STL]]
+- [[file:roll 27mm.FCStd][FreeCAD file]]
 
 * 55mm diameter roll
 :PROPERTIES:
@@ -59,9 +59,9 @@ overhangs that are hard to print.
 #+attr_html: :class responsive-img
 [[file:Roll 55mm/roll 55mm, assembled.png]]
 
-- [[file:roll%2055mm,%20body.stl][body STL]]
-- [[file:roll%2055mm,%20cover.stl][cover STL]]
-- [[file:roll%2055mm.FCStd][FreeCAD file]]
+- [[file:roll 55mm, body.stl][body STL]]
+- [[file:roll 55mm, cover.stl][cover STL]]
+- [[file:roll 55mm.FCStd][FreeCAD file]]
 
 * Repository
 
index fec3ee4..45efb2a 100644 (file)
@@ -34,22 +34,22 @@ There are 2 designs:
 :END:
 
 #+attr_html: :class responsive-img
-[[file:PLA%20+%20TPU/make.png]]
+[[file:PLA + TPU/make.png]]
 
 Following parts are glued together:
 #+attr_html: :class responsive-img
-[[file:PLA%20+%20TPU/make,%202.png]]
+[[file:PLA + TPU/make, 2.png]]
 
 ** Male connector case
 :PROPERTIES:
 :CUSTOM_ID: usb-cable-terminals-male-connector-case
 :END:
 #+attr_html: :class responsive-img
-[[file:PLA%20+%20TPU/male%20connector%20case.png]]
+[[file:PLA + TPU/male connector case.png]]
 
 Download:
-- [[file:PLA + TPU/male%20connector%20case.FCStd][FreeCAD project]]
-- [[file:PLA + TPU/male%20connector%20case.stl][STL file]]
+- [[file:PLA + TPU/male connector case.FCStd][FreeCAD project]]
+- [[file:PLA + TPU/male connector case.stl][STL file]]
 
 ** Female connector case
 :PROPERTIES:
@@ -57,14 +57,14 @@ Download:
 :END:
 
 #+attr_html: :class responsive-img
-[[file:PLA%20+%20TPU/female%20connector%20case,%201.png]]
+[[file:PLA + TPU/female connector case, 1.png]]
 
 #+attr_html: :class responsive-img
-[[file:PLA%20+%20TPU/female%20connector%20case,%202.png]]
+[[file:PLA + TPU/female connector case, 2.png]]
 
 Download:
-- [[file:PLA%20+%20TPU/female%20connector%20case.FCStd][FreeCAD project]]
-- [[file:PLA%20+%20TPU/female%20connector%20case.stl][STL file]]
+- [[file:PLA + TPU/female connector case.FCStd][FreeCAD project]]
+- [[file:PLA + TPU/female connector case.stl][STL file]]
 
 * TPU only design for male connector case
 :PROPERTIES:
@@ -80,8 +80,8 @@ Download:
 [[file:TPU/schematic.png]]
 
 Download:
-- [[file:TPU/USB%20cover.FCStd][FreeCAD project]]
-- [[file:TPU/USB%20cover.stl][STL file]]
+- [[file:TPU/USB cover.FCStd][FreeCAD project]]
+- [[file:TPU/USB cover.stl][STL file]]
 
 * Repository
 
index e5395f2..7cb2dde 100644 (file)
 Small book stand.
 
 #+attr_html: :class responsive-img
-[[file:book%20stand.png]]
+[[file:book stand.png]]
 
 Download:
-+ [[file:book%20stand.stl][STL file]]
-+ [[file:book%20stand.FCStd][FreeCAD file]]
++ [[file:book stand.stl][STL file]]
++ [[file:book stand.FCStd][FreeCAD file]]
 
 * Repository
 
index 0e6d3bf..0675572 100644 (file)
@@ -40,7 +40,7 @@ functional, so I re-purposed connector for my own needs but I'm using
 totally incompatible electrical wiring.
 
 #+attr_html: :class responsive-img
-[[file:../alternative%20USB%20layout/schematic.png]]
+[[file:../alternative USB layout/schematic.png]]
 
 As seen, it has dual voltage output. Additionally one wire is
 dedicated to data transmission and can be used with [[https://en.wikipedia.org/wiki/1-Wire][1-Wire]] protocol
@@ -52,36 +52,36 @@ Power supply uses 3D printed body with lots of holes, for fanless
 cooling.
 
 #+attr_html: :class responsive-img
-[[file:Body%20and%20covers/body,%201.png]]
+[[file:Body and covers/body, 1.png]]
 
 Various modules are realized on top of prototype PCBs that slide into
 dedicated rails within the body.
 
 #+attr_html: :class responsive-img
-[[file:Body%20and%20covers/body,%202.png]]
+[[file:Body and covers/body, 2.png]]
 
 Like this:
 
 #+attr_html: :class responsive-img
-[[file:make,%202.png]]
+[[file:make, 2.png]]
 
 When cover is closed, it blocks PCB movement:
 
 #+attr_html: :class responsive-img
-[[file:Body%20and%20covers/cover.png]]
+[[file:Body and covers/cover.png]]
 
 There is still some empty space inside, so why not add dummy cover on
 top that can be replaced later with add-on functionality/expansion
 board/terminal :)
 
 #+attr_html: :class responsive-img
-[[file:Body%20and%20covers/cover%20cover.png]]
+[[file:Body and covers/cover cover.png]]
 
 Download:
-+ [[file:body%20and%20covers/body.stl][Body STL file]]
-+ [[file:body%20and%20covers/cover.stl][Big cover STL file]]
-+ [[file:body%20and%20covers/cover%20cover.stl][Small dummy cover on top, STL file]]
-+ [[file:body%20and%20covers/body%20and%20covers.FCStd][Body and covers FreeCAD project]]
++ [[file:body and covers/body.stl][Body STL file]]
++ [[file:body and covers/cover.stl][Big cover STL file]]
++ [[file:body and covers/cover cover.stl][Small dummy cover on top, STL file]]
++ [[file:body and covers/body and covers.FCStd][Body and covers FreeCAD project]]
 
 * Transformer and AC to DC converter
 :PROPERTIES:
@@ -92,7 +92,7 @@ This is where high voltage from mains electricity enters the system.
 
 Schematic:
 #+attr_html: :class responsive-img
-[[file:Transformer%20and%20AC%20DC%20converter%20board/schematic.png]]
+[[file:Transformer and AC DC converter board/schematic.png]]
 
 For safety I kept high voltage section as minimal as possible. That
 is, wall plug runs straight into transformer. Also I used [[https://www.amazon.de/gp/product/B07VGQKM3G/ref=ppx_yo_dt_b_asin_title_o06_s00?ie=UTF8&psc=1][UV hardening
@@ -102,12 +102,12 @@ Power on/off switch operates on already reduced voltage of about 30
 volts. Power switch is located on [[id:c9a69490-f920-4a31-b32e-b101bfc3d01b][indicator panel]].
 
 #+attr_html: :class responsive-img
-[[file:Transformer%20and%20AC%20DC%20converter%20board/make,%201.png]]
+[[file:Transformer and AC DC converter board/make, 1.png]]
 
 DC current of about 30 volts is then routed to [[id:65d68227-4bf2-4c4f-b4d3-c390bc6a9c34][Main board]].
 
 #+attr_html: :class responsive-img
-[[file:Transformer%20and%20AC%20DC%20converter%20board/make,%202.png]]
+[[file:Transformer and AC DC converter board/make, 2.png]]
 
 [[https://www.amazon.de/gp/product/B07RLQH5TR/ref=ppx_yo_dt_b_asin_title_o07_s00?ie=UTF8&psc=1][Single sided prototype PCB is used]].
 
@@ -122,11 +122,11 @@ connects all components. It also houses 2 [[https://www.amazon.de/gp/product/B07
 voltage converters]].
 
 #+attr_html: :class responsive-img
-[[file:Main%20board/main%20board,%201.png]]
+[[file:Main board/main board, 1.png]]
 
 High-level schematic of entire device:
 #+attr_html: :class responsive-img
-[[file:Main%20board/schematic.png]]
+[[file:Main board/schematic.png]]
 
 As seen from schematic, ~30 volts DC from transformer board is routed
 into first step-down converter that reduces it to about 15V. Reduced
@@ -159,7 +159,7 @@ On schematic above, some wires are annotated with numbers from 1
 to 13. This corresponds to output pins on the board.
 
 #+attr_html: :class responsive-img
-[[file:Main%20board/main%20board,%202.png]]
+[[file:Main board/main board, 2.png]]
 * Current limiter
 :PROPERTIES:
 :ID:       afc22d23-9bc4-421c-9cac-e0ce34bd36bc
@@ -168,13 +168,13 @@ to 13. This corresponds to output pins on the board.
 
 Schematic:
 #+attr_html: :class responsive-img
-[[file:Current%20limiter/schematic.png]]
+[[file:Current limiter/schematic.png]]
 
 Simple LM317 based current limiter is used. I used 4.7 ohm
 resistor. It provides about 265 milliamps of current. See [[http://www.reuk.co.uk/wordpress/electric-circuit/lm317-current-calculator/][calculator]].
 
 #+attr_html: :class responsive-img
-[[file:Current%20limiter/current%20limiter,%201.png]]
+[[file:Current limiter/current limiter, 1.png]]
 
 Thermal paste below and UV hardening glue on top is used to attach
 LM317 to the heatsink. There is also jumper-like solution on top
@@ -185,7 +185,7 @@ If attached battery is really empty, significant voltage drop can
 occur in LM317. Heatsink is needed to dissipate that power.
 
 #+attr_html: :class responsive-img
-[[file:Current%20limiter/current%20limiter,%202.png]]
+[[file:Current limiter/current limiter, 2.png]]
 
 Note: resistor gets hot too.
 
@@ -196,20 +196,20 @@ Note: resistor gets hot too.
 :END:
 
 #+attr_html: :class responsive-img
-[[file:Indicator%20panel/indicator%20panel,%201.png]]
+[[file:Indicator panel/indicator panel, 1.png]]
 
 Basically 2 digital DC voltmeters and main on/off switch.
 
 #+attr_html: :class responsive-img
-[[file:Indicator%20panel/indicator%20panel,%202.png]]
+[[file:Indicator panel/indicator panel, 2.png]]
 
 Download:
 
 #+attr_html: :class responsive-img
-[[file:Indicator%20panel/indicator%20panel.png]]
+[[file:Indicator panel/indicator panel.png]]
 
-+ [[file:indicator%20panel/indicator%20panel.stl][STL file]]
-+ [[file:indicator%20panel/indicator%20panel.FCStd][FreeCAD project]]
++ [[file:indicator panel/indicator panel.stl][STL file]]
++ [[file:indicator panel/indicator panel.FCStd][FreeCAD project]]
 
 * Connector terminal
 :PROPERTIES:
@@ -219,7 +219,7 @@ Download:
 
 Schematic:
 #+attr_html: :class responsive-img
-[[file:Connector%20terminal/schematic.png]]
+[[file:Connector terminal/schematic.png]]
 
 As seen above, most of the USB connectors are used to deliver dual
 power output and 1-wire data connectivity, except one on the bottom
@@ -229,32 +229,32 @@ in as well to stabilize against smaller current spikes.
 Electrically schematic is realized using smaller prototype PCBs.
 
 #+attr_html: :class responsive-img
-[[file:Connector%20terminal/make,%201.png]]
+[[file:Connector terminal/make, 1.png]]
 
 Those PCBs are wired to central small PCB that acts as a hub:
 
 #+attr_html: :class responsive-img
-[[file:Connector%20terminal/make,%202.png]]
+[[file:Connector terminal/make, 2.png]]
 
 PCBs are held together by being sandwiched between front panel:
 
 #+attr_html: :class responsive-img
-[[file:Connector%20terminal/front%20panel.png]]
+[[file:Connector terminal/front panel.png]]
 
 and smaller back-end plate:
 
 #+attr_html: :class responsive-img
-[[file:Connector%20terminal/back%20panel.png]]
+[[file:Connector terminal/back panel.png]]
 
 Result:
 
 #+attr_html: :class responsive-img
-[[file:Connector%20terminal/make,%203.png]]
+[[file:Connector terminal/make, 3.png]]
 
 Download:
-+ [[file:connector%20terminal/front%20panel.stl][front panel STL]]
-+ [[file:connector%20terminal/back%20panel.stl][back panel STL]]
-+ [[file:connector%20terminal/connector%20terminal.FCStd][FreeCAD project]]
++ [[file:connector terminal/front panel.stl][front panel STL]]
++ [[file:connector terminal/back panel.stl][back panel STL]]
++ [[file:connector terminal/connector terminal.FCStd][FreeCAD project]]
 
 * Calibration
 :PROPERTIES:
index 72c6be6..be3c51e 100644 (file)
@@ -38,44 +38,44 @@ Schematic:
 
 Here is front panel for switches:
 #+attr_html: :class responsive-img
-[[file:front%20panel.png]]
+[[file:front panel.png]]
 
 Download:
-+ [[file:front%20panel.FCStd][FreeCAD project]]
-+ [[file:front%20panel.stl][STL file]]
++ [[file:front panel.FCStd][FreeCAD project]]
++ [[file:front panel.stl][STL file]]
 
 Sometimes I would like to use lightbulbs with various parameters as
 test load/indicator. Current device has 4 of them included.
 
 Here is front panel for light bulbs:
 #+attr_html: :class responsive-img
-[[file:indicator%20panel.png]]
+[[file:indicator panel.png]]
 
 Download:
-+ [[file:indicator%20panel.FCStd][FreeCAD project]]
-+ [[file:indicator%20panel.stl][STL file]]
++ [[file:indicator panel.FCStd][FreeCAD project]]
++ [[file:indicator panel.stl][STL file]]
 
 After assembly using prototype PCB:
 #+attr_html: :class responsive-img
-[[file:make,%202.png]]
+[[file:make, 2.png]]
 
 Following body is used as a case and PCB support:
 #+attr_html: :class responsive-img
 [[file:body.png]]
 
 Download:
-+ [[file:body%20and%20back%20cover.FCStd][FreeCAD project (body + back cover)]]
++ [[file:body and back cover.FCStd][FreeCAD project (body + back cover)]]
 + [[file:body.stl][STL file for body]]
 
 Result:
 #+attr_html: :class responsive-img
-[[file:make,%203.png]]
+[[file:make, 3.png]]
 
 Cover on the back:
 #+attr_html: :class responsive-img
-[[file:back%20cover.png]]
+[[file:back cover.png]]
 
-Download: [[file:back%20cover.stl][STL file]]
+Download: [[file:back cover.stl][STL file]]
 
 Button covers:
 #+attr_html: :class responsive-img
index c8a927d..d59e897 100644 (file)
@@ -67,7 +67,7 @@ Example warning marking on device to indicate that alternative USB
 layout is used here:
 
 #+attr_html: :class responsive-img
-[[file:../lab%20heater%20and%20cooler/make,%202.png]]
+[[file:../lab heater and cooler/make, 2.png]]
 
 * Repository
 
index c2fc875..999a61e 100644 (file)
@@ -22,7 +22,7 @@
 [[file:make.png]]
 
 #+attr_html: :class responsive-img
-[[file:make,%202.png]]
+[[file:make, 2.png]]
 
 Simple rechargeable Ni-MH battery tester. The problem with those
 batteries is: right after you take them out of charger, voltage level
@@ -36,7 +36,7 @@ shorting battery + and - terminals using 5 ohm power resistor
 load.
 
 #+attr_html: :class responsive-img
-[[file:electrical%20schematic.png]]
+[[file:electrical schematic.png]]
 
 I use vintage analog voltmeter. Instead of power resistor I use
 Nichrome resistance wire. Test/measurement button should not be
index 14488b3..861db3c 100644 (file)
@@ -34,13 +34,13 @@ producing device can handle combined load. See:
 https://en.wikipedia.org/wiki/Series_and_parallel_circuits#Resistance_units_2
 
 #+attr_html: :class responsive-img
-[[file:make,%202.png]]
+[[file:make, 2.png]]
 
 Device consists of body and cover that are held together by single
 screw at the center:
 
 #+attr_html: :class responsive-img
-[[file:cover,%202.png]]
+[[file:cover, 2.png]]
 
 * Download
 :PROPERTIES:
index 04ed2dd..0327435 100644 (file)
@@ -34,13 +34,13 @@ onboard power supply or batteries can handle. It has on/off switch and
 stereo audio input. Audio input impedance is about 100 ohms.
 
 #+attr_html: :class responsive-img
-[[file:make,%20side.png]]
+[[file:make, side.png]]
 
 Idea for the holes on the top and smaller ones on the bottom back is
 to enable air flow for passive cooling.
 
 #+attr_html: :class responsive-img
-[[file:make,%20back.png]]
+[[file:make, back.png]]
 
 Entire construction is made of parts, no larger than
 120x120x120mm. Maximum for my printer.
@@ -52,25 +52,25 @@ Entire construction is made of parts, no larger than
 Device is powered by 4 times AA NiMH batteries (1.2V each).
 
 #+attr_html: :class responsive-img
-[[file:Battery%20holder/schematic.png]]
+[[file:Battery holder/schematic.png]]
 
 I happened to have AA battery adapters lying around with different
 bottom hole configurations. Therefore this weird hole design:
 
 #+attr_html: :class responsive-img
-[[file:Battery%20holder/battery%20holder.png]]
+[[file:Battery holder/battery holder.png]]
 
 Download:
-+ [[file:battery%20holder/battery%20holder.FCStd][FreeCAD file]]
-+ [[file:battery%20holder/battery%20holder.stl][STL file]]
++ [[file:battery holder/battery holder.FCStd][FreeCAD file]]
++ [[file:battery holder/battery holder.stl][STL file]]
 
 Result:
 #+attr_html: :class responsive-img
-[[file:Battery%20holder/make.png]]
+[[file:Battery holder/make.png]]
 
 Attaches to the back of the body:
 #+attr_html: :class responsive-img
-[[file:Battery%20holder/mounted%20on%20the%20back.png]]
+[[file:Battery holder/mounted on the back.png]]
 
 * 20V up-step module
 :PROPERTIES:
@@ -80,13 +80,13 @@ Battery pack voltage is routed through main on/off switch on the front
 panel, and then it goes to the 20V up-step module.
 
 #+attr_html: :class responsive-img
-[[file:20V%20upstep%20module/schematic.png]]
+[[file:20V upstep module/schematic.png]]
 
 It uses ready made upstep module, but adds extra voltage filtering via
 inductor and capacitors.
 
 #+attr_html: :class responsive-img
-[[file:20V%20upstep%20module/make.png]]
+[[file:20V upstep module/make.png]]
 
 * Main board
 :PROPERTIES:
@@ -97,47 +97,47 @@ Voltage upstep above sits on top of main board (motherboard). It has
 uniform central bus that spans all connectors.
 
 #+attr_html: :class responsive-img
-[[file:Main%20board/internal%20bus.png]]
+[[file:Main board/internal bus.png]]
 
 #+attr_html: :class responsive-img
-[[file:Main%20board/bus%20on%20the%20bottom,%202.png]]
+[[file:Main board/bus on the bottom, 2.png]]
 
 First row of the main board is special IO terminal (for connecting
 speakers, front panel, etc..)
 
 #+attr_html: :class responsive-img
-[[file:Main%20board/IO%20terminal.png]]
+[[file:Main board/IO terminal.png]]
 
 Remaining rows are for connecting boards:
 
 #+attr_html: :class responsive-img
-[[file:Main%20board/1.png]]
+[[file:Main board/1.png]]
 
 To provide structural support, main board is attached to frame:
 
 #+attr_html: :class responsive-img
-[[file:Main%20board/board%20fixator%20body.png]]
+[[file:Main board/board fixator body.png]]
 
 Download:
-+ [[file:main%20board/board%20fixator%20body.FCStd][FreeCAD file]]
-+ [[file:main%20board/board%20fixator%20body.stl][STL file]]
++ [[file:main board/board fixator body.FCStd][FreeCAD file]]
++ [[file:main board/board fixator body.stl][STL file]]
 
 And boards plugged into main board are fixed at the top, using clip:
 
 #+attr_html: :class responsive-img
-[[file:Main%20board/board%20fixator%20top%20clip.png]]
+[[file:Main board/board fixator top clip.png]]
 
 Download:
-+ [[file:main%20board/board%20fixator%20top%20clip.FCStd][FreeCAD file]]
-+ [[file:main%20board/board%20fixator%20top%20clip.stl][STL file]]
++ [[file:main board/board fixator top clip.FCStd][FreeCAD file]]
++ [[file:main board/board fixator top clip.stl][STL file]]
 
 Result:
 
 #+attr_html: :class responsive-img
-[[file:Main%20board/bus%20on%20the%20bottom,%201.png]]
+[[file:Main board/bus on the bottom, 1.png]]
 
 #+attr_html: :class responsive-img
-[[file:Main%20board/board%20fixator.png]]
+[[file:Main board/board fixator.png]]
 
 * Mono audio amplifier module
 :PROPERTIES:
@@ -150,24 +150,24 @@ identical audio amp modules had to be built, one for left speaker, one
 for right.
 
 #+attr_html: :class responsive-img
-[[file:Mono%20audio%20amp%20module/schematic.png]]
+[[file:Mono audio amp module/schematic.png]]
 
 I like to build on top of prototype PCBs. Gives results much faster
 for one-off projects. Before soldering, I solve component layout on
 paper:
 
 #+attr_html: :class responsive-img
-[[file:Mono%20audio%20amp%20module/PCB%20layout.png]]
+[[file:Mono audio amp module/PCB layout.png]]
 
 Result - front:
 
 #+attr_html: :class responsive-img
-[[file:Mono%20audio%20amp%20module/assembled%20front.png]]
+[[file:Mono audio amp module/assembled front.png]]
 
 Result - back:
 
 #+attr_html: :class responsive-img
-[[file:Mono%20audio%20amp%20module/assembled%20back.png]]
+[[file:Mono audio amp module/assembled back.png]]
 
 Here copper tape is used as improvised heatsink.
 
@@ -185,25 +185,25 @@ combined.
 Capacitor acts as high-pass filter on top of tiny PCB:
 
 #+attr_html: :class responsive-img
-[[file:Speakers/PCB%20layout.png]]
+[[file:Speakers/PCB layout.png]]
 
 Speaker enclosure:
 
 #+attr_html: :class responsive-img
-[[file:Speakers/speaker%20enclosure.png]]
+[[file:Speakers/speaker enclosure.png]]
 
 Download:
-+ [[file:speakers/speaker%20enclosure.FCStd][FreeCAD file]]
-+ [[file:speakers/speaker%20enclosure.stl][STL file]]
++ [[file:speakers/speaker enclosure.FCStd][FreeCAD file]]
++ [[file:speakers/speaker enclosure.stl][STL file]]
 
 Speaker enclosure cover:
 
 #+attr_html: :class responsive-img
-[[file:Speakers/speaker%20enclosure%20cover.png]]
+[[file:Speakers/speaker enclosure cover.png]]
 
 Download:
-+ [[file:speakers/speaker%20enclosure%20cover.FCStd][FreeCAD file]]
-+ [[file:speakers/speaker%20enclosure%20cover.stl][STL file]]
++ [[file:speakers/speaker enclosure cover.FCStd][FreeCAD file]]
++ [[file:speakers/speaker enclosure cover.stl][STL file]]
 
 Result:
 
@@ -228,30 +228,30 @@ I decided to add another voltage up-step module (target voltage output
 set to 6V). This time directly on the front panel.
 
 #+attr_html: :class responsive-img
-[[file:Front%20panel/schematic.png]]
+[[file:Front panel/schematic.png]]
 
 Front panel case:
 
 #+attr_html: :class responsive-img
-[[file:Front%20panel/front%20panel,%20front.png]]
+[[file:Front panel/front panel, front.png]]
 
 #+attr_html: :class responsive-img
-[[file:Front%20panel/front%20panel,%20back.png]]
+[[file:Front panel/front panel, back.png]]
 
 Electronics fits inside:
 
 #+attr_html: :class responsive-img
-[[file:Front%20panel/front%20panel,%20back,%20make.png]]
+[[file:Front panel/front panel, back, make.png]]
 
 Front view:
 
 #+attr_html: :class responsive-img
-[[file:Front%20panel/front%20panel,%20front,%20make.png]]
+[[file:Front panel/front panel, front, make.png]]
 
 And attaches to the remaining components:
 
 #+attr_html: :class responsive-img
-[[file:Front%20panel/attachment.png]]
+[[file:Front panel/attachment.png]]
 
 * Extra capacitors
 :PROPERTIES:
@@ -262,17 +262,17 @@ power/volume can be further enhanced by adding high power capacitors
 to even out load on primary 20V up-step module.
 
 #+attr_html: :class responsive-img
-[[file:Extra%20capacitors/extra%20caps.png]]
+[[file:Extra capacitors/extra caps.png]]
 
 Download:
-+ [[file:extra%20capacitors/extra%20caps.FCStd][FreeCAD project]]
-+ [[file:extra%20capacitors/extra%20caps.stl][STL file]]
++ [[file:extra capacitors/extra caps.FCStd][FreeCAD project]]
++ [[file:extra capacitors/extra caps.stl][STL file]]
 
 Extra caps are mounted on top of the speaker and electrically attached
 to the main board.
 
 #+attr_html: :class responsive-img
-[[file:Extra%20capacitors/make.png]]
+[[file:Extra capacitors/make.png]]
 
 * Center box
 :PROPERTIES:
@@ -283,15 +283,15 @@ Last physical part, to attach it all together: central body.
 
 Front:
 #+attr_html: :class responsive-img
-[[file:Center%20box/front.png]]
+[[file:Center box/front.png]]
 
 Back:
 #+attr_html: :class responsive-img
-[[file:Center%20box/back.png]]
+[[file:Center box/back.png]]
 
 Download:
-+ [[file:center%20box/center%20box.FCStd][FreeCAD file]]
-+ [[file:center%20box/center%20box.stl][STL file]]
++ [[file:center box/center box.FCStd][FreeCAD file]]
++ [[file:center box/center box.stl][STL file]]
 
 * Conclusions / TODO
 :PROPERTIES:
@@ -299,7 +299,7 @@ Download:
 :END:
 Photo of initial PSU + audio amp test:
 #+attr_html: :class responsive-img
-[[file:initial%20test.png]]
+[[file:initial test.png]]
 
 Improvement ideas:
 
index 1191b24..0b797dc 100644 (file)
@@ -29,7 +29,7 @@ It all started with couple of cheap USB desk fans that were a bit too
 noisy:
 
 #+attr_html: :class responsive-img
-[[file:mini%20fan.png]]
+[[file:mini fan.png]]
 
 Idea is to add DC-DC step-down converter to reduce motor voltage to
 make it quieter ([[https://www.amazon.de/gp/product/B07K3W78SQ/ref=ppx_yo_dt_b_asin_title_o01_s00?ie=UTF8&psc=1][Purchased form here]]). And since I already have this
@@ -60,48 +60,48 @@ From original fan I kept:
 Engine is attached with screws to following back-plate:
 
 #+attr_html: :class responsive-img
-[[file:fan%20housing%20-%20fan%20mount.png]]
+[[file:fan housing - fan mount.png]]
 
 And result is encased into pipelike case:
 
 #+attr_html: :class responsive-img
-[[file:fan%20housing%20-%20cover%20assembly.png]]
+[[file:fan housing - cover assembly.png]]
 
 Download:
-+ STL: [[file:fan%20housing%20-%20fan%20mount.stl][fan mount back plate]]
-+ STL: [[file:fan%20housing%20-%20cover.stl][pipe-like case]]
-+ [[file:fan%20housing.FCStd][FreeCAD project]]
++ STL: [[file:fan housing - fan mount.stl][fan mount back plate]]
++ STL: [[file:fan housing - cover.stl][pipe-like case]]
++ [[file:fan housing.FCStd][FreeCAD project]]
 
 Fan enclosure attaches to the rectangular body below using following
 connector (glued to the fan housing):
 
 #+attr_html: :class responsive-img
-[[file:fan%20housing%20connector.png]]
+[[file:fan housing connector.png]]
 
 Download:
-+ [[file:fan%20housing%20connector.stl][STL file]]
-+ [[file:fan%20housing%20connector.FCStd][FreeCAD project]]
++ [[file:fan housing connector.stl][STL file]]
++ [[file:fan housing connector.FCStd][FreeCAD project]]
 
 Bottom part to house 2 PCBs, on/off button and DC connector:
 #+attr_html: :class responsive-img
-[[file:bottom%20stand%20body.png]]
+[[file:bottom stand body.png]]
 
 Component attachment:
 #+attr_html: :class responsive-img
-[[file:make,%202.png]]
+[[file:make, 2.png]]
 
 And is closed by cover:
 #+attr_html: :class responsive-img
-[[file:bottom%20stand%20cover%20assembly.png]]
+[[file:bottom stand cover assembly.png]]
 
 Download:
-+ STL: [[file:bottom%20stand%20body.stl][bottom stand body]]
-+ STL: [[file:bottom%20stand%20cover.stl]]
-+ [[file:bottom%20stand.FCStd][FreeCAD project]]
++ STL: [[file:bottom stand body.stl][bottom stand body]]
++ STL: [[file:bottom stand cover.stl]]
++ [[file:bottom stand.FCStd][FreeCAD project]]
 
 After assembly, it looks like this from the back:
 #+attr_html: :class responsive-img
-[[file:make,%203.png]]
+[[file:make, 3.png]]
 
 Note, part of the body is deformed during printing. I have heated bed
 and I even printed raft support in Cura and it did not help. In my
index 76c3036..161b7e5 100644 (file)
@@ -27,8 +27,8 @@ Keeps window open so that strong wind will not slam it close.
 [[file:schematic.png]]
 
 Download:
-+ [[file:window%20fixator.stl][STL file]]
-+ [[file:window%20fixator.FCStd][FreeCAD file]]
++ [[file:window fixator.stl][STL file]]
++ [[file:window fixator.FCStd][FreeCAD file]]
 
 * Repository
 
index 0616ab9..6d4182f 100644 (file)
@@ -48,7 +48,7 @@ sides. Bottom rectangular stand is attached to body via screw on the
 bottom.
 
 FreeCAD files:
-+ [[file:body%20and%20cover.FCStd][body and cover]]
++ [[file:body and cover.FCStd][body and cover]]
 + [[file:bottom.FCStd][bottom]]
 
 Example photo photographed from film:
index c290558..acd7dea 100644 (file)
@@ -61,7 +61,7 @@ choosing "SHOOT WITHOT LENS" option within camera settings menu.
 [[file:shoot without lens.png]]
 
 See also:
-+ [[file:../microscope%20slide%20box/index.html][Case for microscope slides and cover slips]]
++ [[file:../microscope slide box/index.html][Case for microscope slides and cover slips]]
 
 * Repository
 
index bec093a..02122c9 100644 (file)
@@ -29,26 +29,26 @@ portable gyro stabilizer that has camera tripod interface. Therefore
 cameras and binoculars can be mounted.
 
 #+attr_html: :class responsive-img
-[[file:make,%202.png]]
+[[file:make, 2.png]]
 
 Old computer hard disk platters are used as rotating discs. They are
 attached to following disk mount:
 
 #+attr_html: :class responsive-img
-[[file:disk%20mount%20body.png]]
+[[file:disk mount body.png]]
 
 Download:
-- [[file:disk%20mount.FCStd][Editable FreeCAD project]]
-- [[file:disk%20mount%20body.stl][Printable STL file]]
+- [[file:disk mount.FCStd][Editable FreeCAD project]]
+- [[file:disk mount body.stl][Printable STL file]]
 
 Disk platters are fixed to disk mount using glued tightly fitting top
 ring:
 
 #+attr_html: :class responsive-img
-[[file:disk%20mount%20top%20ring.png]]
+[[file:disk mount top ring.png]]
 
 Download:
-- [[file:disk%20mount%20top%20ring.stl][Printable STL file]]
+- [[file:disk mount top ring.stl][Printable STL file]]
 
 Discs are rotated by electric motor. Motor is cooled by electric fan.
 Motor and fan are powered by 12V that is generated by 3 voltage upstep
@@ -59,49 +59,49 @@ converters running in parallel.
 
 Body:
 #+attr_html: :class responsive-img
-[[file:make,%201.png]]
+[[file:make, 1.png]]
 
 FreeCAD model of the main body:
 
 #+attr_html: :class responsive-img
-[[file:main%20body,%201.png]]
+[[file:main body, 1.png]]
 
 #+attr_html: :class responsive-img
-[[file:main%20body,%202.png]]
+[[file:main body, 2.png]]
 
 Download:
 - [[file:body.FCStd][Editable FreeCAD file]]
-- [[file:main%20body.stl][Printable STL file]]
+- [[file:main body.stl][Printable STL file]]
 
 Rotating discs are covered and protected by top cover:
 
 #+attr_html: :class responsive-img
-[[file:top%20cover.png]]
+[[file:top cover.png]]
 
 Bottom part of the main body has cover:
 
 #+attr_html: :class responsive-img
-[[file:bottom%20cover.png]]
+[[file:bottom cover.png]]
 
 Download:
-- [[file:bottom%20cover.stl][Printable STL file]]
+- [[file:bottom cover.stl][Printable STL file]]
 
 Camera/binoculars can be mounted on dedicated holder that is screwed
 on top of the cover:
 
 #+attr_html: :class responsive-img
-[[file:binocular%20mount.png]]
+[[file:binocular mount.png]]
 
 Download:
-- [[file:binocular%20mount.stl][Printable STL file]]
+- [[file:binocular mount.stl][Printable STL file]]
 
 Result:
 
 #+attr_html: :class responsive-img
-[[file:make,%203.png]]
+[[file:make, 3.png]]
 
 #+attr_html: :class responsive-img
-[[file:make,%204.png]]
+[[file:make, 4.png]]
 
 * Conclusion
 :PROPERTIES: