1. X
  2. Corentin - corentin.tech
Log inSign up
Corentin - corentin.tech
244 posts
Corentin - corentin.tech profile banner
user avatar

Corentin - corentin.tech

@cthmsst
FOSS creator, self-hosting enthusiast. I made @papra_app, @ittoolsdottech, enclosed.cc and many other things Prev : Indy, EDF, INSA - fr, en
Lyon
corentin.tech
Joined May 2017
404
Following
357
Followers
RepliesRepliesMediaMedia

Log in or sign up for X

See what’s happening and join the conversation

Continue with phone
or
Log in with username or email
Terms·Privacy·Cookies·Accessibility·US TIDA·Ads Info·© 2026 X Corp.
  • Pinned
    user avatar
    Corentin - corentin.tech
    @cthmsst
    Apr 3, 2025
    🚀 Papra Beta is here, and it's ready for self-hosting! Papra is an open-source, minimalistic and self-hostable document management and archiving platform, designed for simplicity #opensource #buildinpublic #javascript
    Announcement graphic stating 'Papra Beta is Here!' with a stylized document icon on a dark background
  • user avatar
    Corentin - corentin.tech
    @cthmsst
    Jan 20
    I even made a small online demo of the parser here: search-parser.papra.app
    user avatar
    Corentin - corentin.tech
    @cthmsst
    Jan 20
    I really had fun building a full featured AST-based parser for this search query engine 🙌
    Code snippet image:
import { parseSearchQuery } from '@papra/search-parser';

parseSearchQuery({ query: 'foobar' });
// { expression: { type: 'text', value: 'foobar' }, issues: [] }

parseSearchQuery({ query: 'tag:invoice' });
// { expression: { type: 'filter', field: 'tag', operator: '=', value: 'invoice' }, issues: [] }

parseSearchQuery({ query: '(tag:invoice OR tag:receipt) AND createdAt:>2024-01-01' });
// {
//   expression: {
//     type: 'and',
//     operands: [
//       {
//         type: 'or',
//         operands: [
//           { type: 'filter', field: 'tag', operator: '=', value: 'invoice' },
//           { type: 'filter', field: 'tag', operator: '=', value: 'receipt' },
//         ],
//       },
//       { type: 'filter', field: 'createdAt', operator: '>', value: '2024-01-01' },
//     ],
//   },
//   issues: [],
// }
  • user avatar
    Corentin - corentin.tech
    @cthmsst
    Jan 20
    I really had fun building a full featured AST-based parser for this search query engine 🙌
    Code snippet image:
import { parseSearchQuery } from '@papra/search-parser';

parseSearchQuery({ query: 'foobar' });
// { expression: { type: 'text', value: 'foobar' }, issues: [] }

parseSearchQuery({ query: 'tag:invoice' });
// { expression: { type: 'filter', field: 'tag', operator: '=', value: 'invoice' }, issues: [] }

parseSearchQuery({ query: '(tag:invoice OR tag:receipt) AND createdAt:>2024-01-01' });
// {
//   expression: {
//     type: 'and',
//     operands: [
//       {
//         type: 'or',
//         operands: [
//           { type: 'filter', field: 'tag', operator: '=', value: 'invoice' },
//           { type: 'filter', field: 'tag', operator: '=', value: 'receipt' },
//         ],
//       },
//       { type: 'filter', field: 'createdAt', operator: '>', value: '2024-01-01' },
//     ],
//   },
//   issues: [],
// }
    Papra advanced search screenshot
    user avatar
    Papra - Open source document archiving
    @papra_app
    Jan 20
    Replying to @papra_app
    👉 Advanced search You can now use advanced search queries with filters, logical operators, and full-text search, ex: "tag:invoices created:>2025 electricity"
  • user avatar
    Corentin - corentin.tech
    @cthmsst
    Jan 2
    Spent some time making proper documentation for Crowlog, my modern "yet-another" logging library for any JS/TS project -> crowlog.dev #OpenSource #JavaScript #NPM
    Crowlog - Extendable JS logging library
    Crowlog - Extendable JS logging library
    From crowlog.dev
  • user avatar
    Corentin - corentin.tech
    @cthmsst
    Dec 16, 2025
    Thank you @WMACCESS for sponsoring me on @github , really appreciated 🙏