diff --git a/bin/gargantext-cli/Main.hs b/bin/gargantext-cli/Main.hs
index 616070341cdee8d05579b51a3c4cef8ffc47633f..0571e13b8cb10e3b7360f53f77d1c654500af030 100644
--- a/bin/gargantext-cli/Main.hs
+++ b/bin/gargantext-cli/Main.hs
@@ -11,15 +11,12 @@ Main specifications to index a corpus with a term list
 
  -}
 
-{-# LANGUAGE StandaloneDeriving #-}
-{-# LANGUAGE TypeOperators      #-}
 {-# LANGUAGE Strict             #-}
 
 module Main where
 
 import Control.Concurrent.Async as CCA (mapConcurrently)
-import Control.Monad.IO.Class
-import Data.Aeson
+import Data.Aeson ( ToJSON, encode )
 import Data.List.Split (chunksOf)
 import Data.Map.Strict qualified as DM
 import Data.Text (pack)
@@ -28,14 +25,12 @@ import Data.Text.Lazy qualified as DTL
 import Data.Text.Lazy.Encoding qualified as TLE
 import Data.Tuple.Extra (both)
 import Data.Vector qualified as DV
-import GHC.Generics
-import Gargantext.Core.Text.Context
+import Gargantext.Core.Text.Context (TermList)
 import Gargantext.Core.Text.Corpus.Parsers.CSV (readCSVFile, csv_title, csv_abstract, csv_publication_year, fromMIntOrDec, defaultYear)
 import Gargantext.Core.Text.List.Formats.CSV (csvMapTermList)
 import Gargantext.Core.Text.Metrics.Count (coocOnContexts, Coocs)
-import Gargantext.Core.Text.Terms.WithList
-import Gargantext.Prelude hiding (show)
-import Protolude
+import Gargantext.Core.Text.Terms.WithList ( Patterns, buildPatterns, extractTermsWithList )
+import Gargantext.Prelude
 import System.IO (hFlush)
 
 ------------------------------------------------------------------------
diff --git a/cabal.project b/cabal.project
index 18c5a02d1dc10deccaad0bbb0637f14978370d77..2cc3d44aebbe9f8a176bd0f576044ff463f25e83 100644
--- a/cabal.project
+++ b/cabal.project
@@ -131,7 +131,8 @@ source-repository-package
 source-repository-package
     type: git
     location: https://gitlab.iscpif.fr/gargantext/haskell-gargantext-prelude
-    tag: 618f711a530df56caefbb1577c4bf3d5ff45e214
+    -- tag: 618f711a530df56caefbb1577c4bf3d5ff45e214
+    tag: d4f9bee483d41bbdf8ab4e09efb5a5a8216edff4
 
 source-repository-package
     type: git
diff --git a/src/Gargantext/API/Admin/Auth/Types.hs b/src/Gargantext/API/Admin/Auth/Types.hs
index 9fb4bae2239e6020fdcef970c42d78d9d4ce71b1..936bffbc2571a187c9a20ff8bcc4f3d967ac5f50 100644
--- a/src/Gargantext/API/Admin/Auth/Types.hs
+++ b/src/Gargantext/API/Admin/Auth/Types.hs
@@ -13,11 +13,9 @@ Portability : POSIX
 module Gargantext.API.Admin.Auth.Types
       where
 
-import Control.Lens hiding (elements, to)
-import Data.Aeson.TH (deriveJSON)
 import qualified Data.Aeson.TH as JSON
 import Data.List (tail)
-import Data.Swagger
+import Data.Swagger ( ToSchema(..), genericDeclareNamedSchema )
 import Gargantext.Core.Types.Individu (Username, GargPassword(..), arbitraryUsername, arbitraryPassword)
 import Gargantext.Core.Utils.Prefix (unPrefix, unPrefixSwagger)
 import Gargantext.Database.Admin.Types.Node (NodeId(..), ListId, DocId, UserId (..))
diff --git a/src/Gargantext/API/Count.hs b/src/Gargantext/API/Count.hs
index 593ccc1f9a4fa305d7461e38ca8157d45400670f..2c19acc4d2347c047e1c65395d520085490d497d 100644
--- a/src/Gargantext/API/Count.hs
+++ b/src/Gargantext/API/Count.hs
@@ -19,16 +19,13 @@ Count API part of Gargantext.
 module Gargantext.API.Count
       where
 
-import Data.Aeson hiding (Error)
-import Data.Aeson.TH (deriveJSON)
-import Data.Either
-import Data.Swagger
+import Data.Swagger ( ToSchema(..), genericDeclareNamedSchema )
 import Data.Text (pack)
 import Gargantext.Core.Utils.Prefix (unPrefix, unPrefixSwagger)
 import Gargantext.Prelude
-import Servant
+import Servant (JSON, Post)
 import Test.QuickCheck (elements)
-import Test.QuickCheck.Arbitrary
+import Test.QuickCheck.Arbitrary (Arbitrary(..))
 
 -----------------------------------------------------------------------
 -- TODO-ACCESS: CanCount
diff --git a/src/Gargantext/API/Errors/Types.hs b/src/Gargantext/API/Errors/Types.hs
index 26e10872ebfe99c40a7ecbd535395a05be97cb65..ab97e4165967494c8bd5c72a9bb3f9d9f09e3073 100644
--- a/src/Gargantext/API/Errors/Types.hs
+++ b/src/Gargantext/API/Errors/Types.hs
@@ -1,5 +1,15 @@
+{-|
+Module      : Gargantext.API.Errors.Types
+Description :
+Copyright   : (c) CNRS, 2017-Present
+License     : AGPL + CECILL v3
+Maintainer  : team@gargantext.org
+Stability   : experimental
+Portability : POSIX
+-}
+
+
 {-# LANGUAGE ConstraintKinds          #-}
-{-# LANGUAGE KindSignatures           #-}
 {-# LANGUAGE LambdaCase               #-}
 {-# LANGUAGE PolyKinds                #-}
 {-# LANGUAGE RecordWildCards          #-}
@@ -8,7 +18,6 @@
 {-# LANGUAGE StandaloneKindSignatures #-}
 {-# LANGUAGE TemplateHaskell          #-}
 {-# LANGUAGE TypeApplications         #-}
-{-# LANGUAGE TypeFamilies             #-}
 {-# LANGUAGE TypeFamilyDependencies   #-}
 {-# OPTIONS_GHC -Wno-unused-top-binds #-}
 {-# OPTIONS_GHC -Wno-orphans          #-} -- instance IsFrontendErrorData and stage restriction
@@ -36,32 +45,28 @@ module Gargantext.API.Errors.Types (
   , genFrontendErr
   ) where
 
-import Control.Exception
 import Control.Lens (makePrisms)
 import Control.Monad.Fail (fail)
-import Data.Aeson (FromJSON(..), ToJSON(..), Value(..), (.:), (.=), object, withObject, toJSON)
+import Data.Aeson (Value(..), (.:), (.=), object, withObject)
 import Data.Aeson.Types (typeMismatch, emptyArray)
 import Data.List.NonEmpty qualified as NE
-import Data.Singletons.TH
+import Data.Singletons.TH ( SingI(sing), SingKind(fromSing) )
 import Data.Text qualified as T
-import Data.Typeable
 import Data.Validity (Validation(..), ValidationChain (..), prettyValidation)
-import GHC.Generics
-import GHC.Stack
 import Gargantext.API.Admin.Auth.Types (AuthenticationError)
-import Gargantext.API.Errors.Class
-import Gargantext.API.Errors.TH
+import Gargantext.API.Errors.Class (HasAuthenticationError(..))
+import Gargantext.API.Errors.TH ( deriveIsFrontendErrorData )
 import Gargantext.API.Errors.Types.Backend
 import Gargantext.Core.Types (HasValidationError(..))
-import Gargantext.Core.Types.Individu
+import Gargantext.Core.Types.Individu (Username)
 import Gargantext.Database.Admin.Types.Node
-import Gargantext.Database.Query.Table.Node.Error
-import Gargantext.Database.Query.Tree.Error
+import Gargantext.Database.Query.Table.Node.Error (HasNodeError(..), NodeError)
+import Gargantext.Database.Query.Tree.Error (HasTreeError(..), TreeError)
 import Gargantext.Prelude hiding (Location, WithStacktrace)
-import Gargantext.Utils.Dict
+import Gargantext.Utils.Dict (Dict(..))
 import Gargantext.Utils.Jobs.Monad qualified as Jobs
 import Servant (ServerError)
-import Servant.Job.Core
+import Servant.Job.Core ( HasServerError(..) )
 import Servant.Job.Types qualified as SJ
 import Test.QuickCheck
 import Test.QuickCheck.Instances.Text ()
diff --git a/src/Gargantext/API/GraphQL/Utils.hs b/src/Gargantext/API/GraphQL/Utils.hs
index f2f3661136d7063a355b77a107e931641478f28a..445c40514c9c93906b5c7f6d6227b0377c6c54a7 100644
--- a/src/Gargantext/API/GraphQL/Utils.hs
+++ b/src/Gargantext/API/GraphQL/Utils.hs
@@ -12,8 +12,7 @@ Portability : POSIX
 
 module Gargantext.API.GraphQL.Utils where
 
-import Control.Lens ((^.))
-import Control.Lens.Getter (view)
+import Control.Lens (view)
 import Data.Morpheus.Types (GQLTypeOptions, fieldLabelModifier)
 import Data.Text qualified as T
 import Gargantext.API.Admin.Auth.Types (AuthenticatedUser (..), auth_node_id)
diff --git a/src/Gargantext/API/Ngrams.hs b/src/Gargantext/API/Ngrams.hs
index cb36c86742c1411d398de07ad1b8f29c3bfc6212..e59e7d494bc8967191226e02fbc394addb91ee9d 100644
--- a/src/Gargantext/API/Ngrams.hs
+++ b/src/Gargantext/API/Ngrams.hs
@@ -86,7 +86,7 @@ module Gargantext.API.Ngrams
   )
   where
 
-import Control.Lens ((.~), view, (^.), (^..), (+~), (%~), (.~), msumOf, at, ix, _Just, Each(..), (%%~), ifolded, to, withIndex, over)
+import Control.Lens (view, (^..), (+~), (%~), msumOf, at, ix, _Just, Each(..), (%%~), ifolded, to, withIndex, over)
 import Data.Aeson.Text qualified as DAT
 import Data.List qualified as List
 import Data.Map.Strict qualified as Map
diff --git a/src/Gargantext/API/Ngrams/NgramsTree.hs b/src/Gargantext/API/Ngrams/NgramsTree.hs
index 95eb9d2bb670867d1d5a22d96c60f9f578e10435..a74b349aa85de52569e2356009402ffe86a56f43 100644
--- a/src/Gargantext/API/Ngrams/NgramsTree.hs
+++ b/src/Gargantext/API/Ngrams/NgramsTree.hs
@@ -14,18 +14,18 @@ Portability : POSIX
 module Gargantext.API.Ngrams.NgramsTree
   where
 
-import Data.Aeson.TH (deriveJSON)
 import Data.HashMap.Strict (HashMap)
 import Data.HashMap.Strict qualified as HashMap
 import Data.List qualified as List
 import Data.Set qualified as Set
-import Data.Swagger
-import Data.Tree
+import Data.Swagger ( ToSchema(..), genericDeclareNamedSchema )
+import Data.Tree ( Tree(Node), unfoldForest )
 import Gargantext.API.Ngrams.Types
-import Gargantext.Core.Types (ListType(..), NodeId)
+import Gargantext.Core.Types.Main ( ListType(..) )
+import Gargantext.Database.Admin.Types.Node ( NodeId )
 import Gargantext.Core.Utils.Prefix (unPrefix, unPrefixSwagger)
 import Gargantext.Prelude
-import Test.QuickCheck
+import Test.QuickCheck ( Arbitrary(arbitrary) )
 
 type Children = Text
 type Root = Text
diff --git a/src/Gargantext/API/Ngrams/Tools.hs b/src/Gargantext/API/Ngrams/Tools.hs
index e8abefa0452fa71c0948e0b9632906dd258b0653..cd4a369f012ef06d5fdb61056e24e9da34bd2532 100644
--- a/src/Gargantext/API/Ngrams/Tools.hs
+++ b/src/Gargantext/API/Ngrams/Tools.hs
@@ -17,7 +17,7 @@ module Gargantext.API.Ngrams.Tools
   where
 
 -- import Gargantext.Core.NodeStoryFile qualified as NSF
-import Control.Lens (_Just, (^.), at, ix, view, At, Index, IxValue)
+import Control.Lens (_Just, at, ix, view, At, Index, IxValue)
 import Data.HashMap.Strict (HashMap)
 import Data.HashMap.Strict qualified as HM
 import Data.Map.Strict qualified as Map
diff --git a/src/Gargantext/API/Ngrams/Types.hs b/src/Gargantext/API/Ngrams/Types.hs
index 1c77331ef5dbb04391b0cd01b6bb883445397f45..ccb86efde45aa0aba7ca319f7dd3ddb233acad18 100644
--- a/src/Gargantext/API/Ngrams/Types.hs
+++ b/src/Gargantext/API/Ngrams/Types.hs
@@ -19,9 +19,8 @@ module Gargantext.API.Ngrams.Types where
 
 import Codec.Serialise (Serialise())
 import Control.Category ((>>>))
-import Control.Lens (makeLenses, makePrisms, Iso', iso, from, (.~), (.=), (?=), (#), to, folded, {-withIndex, ifolded,-} view, use, (^.), (^?), (%~), (.~), (%=), at, _Just, Each(..), itraverse_, both, forOf_, (?~), over)
+import Control.Lens (makePrisms, Iso', iso, from, (.=), (?=), (#), to, folded, {-withIndex, ifolded,-} view, use, (^?), (%~), (%=), at, _Just, Each(..), itraverse_, both, forOf_, (?~), over)
 import Data.Aeson hiding ((.=))
-import Data.Aeson.TH (deriveJSON)
 import Data.Csv (defaultEncodeOptions, encodeByNameWith, header, namedRecord, EncodeOptions(..), NamedRecord, Quoting(QuoteNone))
 import Data.Csv qualified as Csv
 import Data.HashMap.Strict.InsOrd qualified as InsOrdHashMap
diff --git a/src/Gargantext/API/Node.hs b/src/Gargantext/API/Node.hs
index caf6d7b79a35e758ce53058d7e211e51619cf4cc..1873ef4fd5029c1b986a8953d7483b17cfdcc629 100644
--- a/src/Gargantext/API/Node.hs
+++ b/src/Gargantext/API/Node.hs
@@ -28,27 +28,25 @@ Node API
 module Gargantext.API.Node
   where
 
-import Control.Lens ((^.))
-import Data.Aeson (FromJSON, ToJSON)
-import Data.Aeson.TH (deriveJSON)
-import Data.Swagger
+import Data.Swagger (ToSchema)
 import Gargantext.API.Admin.Auth (withAccess, withPolicy)
 import Gargantext.API.Admin.Auth.Types (PathId(..), AuthenticatedUser (..), auth_node_id)
-import Gargantext.API.Admin.EnvTypes
-import Gargantext.API.Auth.PolicyCheck
-import Gargantext.API.Errors.Types
+import Gargantext.API.Admin.EnvTypes (Env)
+import Gargantext.API.Auth.PolicyCheck ( PolicyChecked, nodeChecks )
+import Gargantext.API.Errors.Types (BackendInternalError)
 import Gargantext.API.Metrics
 import Gargantext.API.Ngrams (TableNgramsApi, apiNgramsTableCorpus)
 import Gargantext.API.Ngrams.Types (TabType(..))
 import Gargantext.API.Node.DocumentUpload qualified as DocumentUpload
-import Gargantext.API.Node.File
+import Gargantext.API.Node.DocumentsFromWriteNodes qualified as DFWN
+import Gargantext.API.Node.File ( FileAsyncApi, FileApi, fileApi, fileAsyncApi )
 import Gargantext.API.Node.FrameCalcUpload qualified as FrameCalcUpload
-import Gargantext.API.Node.New
+import Gargantext.API.Node.New ( PostNodeAsync, PostNode, postNode, postNodeAsyncAPI )
 import Gargantext.API.Node.Share qualified as Share
 import Gargantext.API.Node.Update qualified as Update
-import Gargantext.API.Prelude
+import Gargantext.API.Prelude ( GargM, GargServer )
 import Gargantext.API.Search qualified as Search
-import Gargantext.API.Table
+import Gargantext.API.Table ( TableApi, tableApi, getPair )
 import Gargantext.Core.Types (NodeTableResult)
 import Gargantext.Core.Types.Individu (User(..))
 import Gargantext.Core.Types.Main (Tree, NodeTree)
@@ -57,10 +55,11 @@ import Gargantext.Core.Utils.Prefix (unPrefix)
 import Gargantext.Core.Viz.Phylo.API (PhyloAPI, phyloAPI)
 import Gargantext.Database.Action.Delete qualified as Action (deleteNode)
 import Gargantext.Database.Action.Flow.Pairing (pairing)
-import Gargantext.Database.Admin.Types.Hyperdata
+import Gargantext.Database.Admin.Types.Hyperdata.Prelude ( HyperdataC )
+import Gargantext.Database.Admin.Types.Hyperdata.User ( HyperdataUser )
 import Gargantext.Database.Admin.Types.Node
 import Gargantext.Database.Prelude (Cmd, JSONB)
-import Gargantext.Database.Query.Facet (FacetDoc, OrderBy(..))
+import Gargantext.Database.Query.Facet.Types ( FacetDoc, OrderBy(..) )
 import Gargantext.Database.Query.Table.Node
 import Gargantext.Database.Query.Table.Node.Children (getChildren)
 import Gargantext.Database.Query.Table.Node.Error (HasNodeError(..))
@@ -74,7 +73,6 @@ import Gargantext.Prelude
 import Servant
 import Test.QuickCheck (elements)
 import Test.QuickCheck.Arbitrary (Arbitrary, arbitrary)
-import qualified Gargantext.API.Node.DocumentsFromWriteNodes as DFWN
 
 
 -- | Admin NodesAPI
diff --git a/src/Gargantext/API/Node/Corpus/New.hs b/src/Gargantext/API/Node/Corpus/New.hs
index fd2c96e99b0d25973f80b22098a9b78361fa25ce..89b93d54b0aa81e093cac9e5035b6946b9ff3812 100644
--- a/src/Gargantext/API/Node/Corpus/New.hs
+++ b/src/Gargantext/API/Node/Corpus/New.hs
@@ -21,26 +21,26 @@ module Gargantext.API.Node.Corpus.New
 
 
 import Conduit
-import Control.Lens hiding (elements, Empty)
-import Data.Aeson
-import Data.Aeson.TH (deriveJSON)
+import Control.Lens ( view, non )
+import Data.Aeson ( genericParseJSON, genericToJSON )
 import Data.ByteString.Base64 qualified as BSB64
 import Data.Conduit.Internal (zipSources)
-import Data.Swagger
+import Data.Swagger ( ToSchema(..), genericDeclareNamedSchema )
 import Data.Text qualified as T
 import Data.Text.Encoding qualified as TE
 import EPO.API.Client.Types qualified as EPO
 import Gargantext.API.Admin.Orchestrator.Types (JobLog(..), AsyncJobs)
 import Gargantext.API.Admin.Types (HasSettings)
 import Gargantext.API.Ngrams (commitStatePatch, Versioned(..))
-import Gargantext.API.Node.Corpus.New.Types
-import Gargantext.API.Node.Corpus.Searx
-import Gargantext.API.Node.Corpus.Types
+import Gargantext.API.Node.Corpus.New.Types ( FileFormat(..), FileType(..) )
+import Gargantext.API.Node.Corpus.Searx ( triggerSearxSearch )
+import Gargantext.API.Node.Corpus.Types ( Database, Datafield(Web), database2origin )
 import Gargantext.API.Node.Corpus.Update (addLanguageToCorpus)
 import Gargantext.API.Node.Types
 import Gargantext.Core (Lang(..), withDefaultLanguage, defaultLanguage)
 import Gargantext.Core.NodeStory (HasNodeStoryImmediateSaver, HasNodeArchiveStoryImmediateSaver, currentVersion, NgramsStatePatch')
-import Gargantext.Core.Text.Corpus.API qualified as API
+import Gargantext.API.Admin.Orchestrator.Types qualified as API
+import Gargantext.Core.Text.Corpus.Query qualified as API
 import Gargantext.Core.Text.Corpus.Parsers qualified as Parser (FileType(..), parseFormatC)
 import Gargantext.Core.Text.List.Social (FlowSocialListWith(..))
 import Gargantext.Core.Types.Individu (User(..))
@@ -50,7 +50,8 @@ import Gargantext.Database.Action.Flow.Types (FlowCmdM)
 import Gargantext.Database.Action.Mail (sendMail)
 import Gargantext.Database.Action.Node (mkNodeWithParent)
 import Gargantext.Database.Action.User (getUserId)
-import Gargantext.Database.Admin.Types.Hyperdata
+import Gargantext.Database.Admin.Types.Hyperdata.Document ( ToHyperdataDocument(..) )
+import Gargantext.Database.Admin.Types.Hyperdata.File ( HyperdataFile(..) )
 import Gargantext.Database.Admin.Types.Node (CorpusId, NodeType(..), ParentId)
 import Gargantext.Database.GargDB qualified as GargDB
 import Gargantext.Database.Prelude (hasConfig)
@@ -60,11 +61,11 @@ import Gargantext.Database.Query.Tree.Root (MkCorpusUser(MkCorpusUserNormalCorpu
 import Gargantext.Database.Schema.Node (node_hyperdata)
 import Gargantext.Prelude
 import Gargantext.Prelude.Config (gc_max_docs_parsers)
-import Gargantext.System.Logging
-import Gargantext.Utils.Jobs (JobHandle, MonadJobStatus(..))
-import Servant
+import Gargantext.System.Logging ( logLocM, LogLevel(..) )
+import Gargantext.Utils.Jobs.Monad (JobHandle, MonadJobStatus(..))
+import Servant ( JSON, type (:>), FormUrlEncoded, Capture, Summary )
 import Servant.Job.Utils (jsonOptions)
-import Test.QuickCheck.Arbitrary
+import Test.QuickCheck.Arbitrary (Arbitrary(..))
 
 ------------------------------------------------------------------------
 {-
diff --git a/src/Gargantext/API/Node/Corpus/New/File.hs b/src/Gargantext/API/Node/Corpus/New/File.hs
index d7deddd4f3790abc1c0e110d1fa4c8e82afe0fa2..d0588ab0c36bcfda3e920f0de2ee8cc96800fa5d 100644
--- a/src/Gargantext/API/Node/Corpus/New/File.hs
+++ b/src/Gargantext/API/Node/Corpus/New/File.hs
@@ -12,24 +12,22 @@ Portability : POSIX
 {-# OPTIONS_GHC -fno-warn-orphans #-}
 
 {-# LANGUAGE ScopedTypeVariables  #-}
-{-# LANGUAGE TemplateHaskell      #-}
 {-# LANGUAGE TypeOperators        #-}
 
 module Gargantext.API.Node.Corpus.New.File
   where
 
-import Control.Lens ((.~), (?~))
-import Data.Maybe
+import Control.Lens ((?~))
 import Data.Swagger
-import Gargantext.API.Node.Corpus.New.Types
+import Gargantext.API.Node.Corpus.New.Types (FileFormat, FileType)
 import Gargantext.Core.Types (TODO)
-import Gargantext.Database.Admin.Types.Node
+import Gargantext.Database.Admin.Types.Node (NodeId)
 import Gargantext.Database.Prelude (Cmd)
 import Gargantext.Prelude hiding (hash)
 import Gargantext.Prelude.Crypto.Hash (hash)
-import Servant
-import Servant.Multipart
-import Servant.Swagger.Internal
+import Servant ( JSON, type (:>), Post, QueryParam, Summary )
+import Servant.Multipart ( Input(iName), Mem, MultipartData(inputs), MultipartForm )
+import Servant.Swagger.Internal ( addParam, HasSwagger(..) )
 
 -------------------------------------------------------------
 type Hash = Text
diff --git a/src/Gargantext/API/Node/Corpus/Searx.hs b/src/Gargantext/API/Node/Corpus/Searx.hs
index 02fc2fa41681a933f46f65a167a1f9d6fa6aa01a..04795b7e23d3ff6919f033c8252f197a1aaa6c09 100644
--- a/src/Gargantext/API/Node/Corpus/Searx.hs
+++ b/src/Gargantext/API/Node/Corpus/Searx.hs
@@ -15,7 +15,6 @@ module Gargantext.API.Node.Corpus.Searx where
 
 import Control.Lens (view)
 import Data.Aeson qualified as Aeson
-import Data.Aeson.TH (deriveJSON)
 import Data.HashMap.Strict qualified as HashMap
 import Data.Text qualified as T
 import Data.Text qualified as Text
@@ -25,7 +24,7 @@ import Data.Tuple.Select (sel1, sel2, sel3)
 import Gargantext.Core (Lang(..))
 import Gargantext.Core.NLP (HasNLPServer, nlpServerGet)
 import Gargantext.Core.NodeStory.Types ( HasNodeStory )
-import Gargantext.Core.Text.Corpus.API qualified as API
+import Gargantext.Core.Text.Corpus.Query qualified as Query
 import Gargantext.Core.Text.List (buildNgramsLists)
 import Gargantext.Core.Text.List.Group.WithStem ({-StopSize(..),-} GroupParams(..))
 import Gargantext.Core.Text.Terms (TermType(..))
@@ -44,10 +43,10 @@ import Gargantext.Database.Query.Table.Node.Error (HasNodeError)
 import Gargantext.Database.Query.Tree.Error (HasTreeError)
 import Gargantext.Database.Query.Tree.Root (getOrMkRootWithCorpus, MkCorpusUser (MkCorpusUserMaster))
 import Gargantext.Prelude hiding (All)
-import Gargantext.Prelude.Config
-import Gargantext.Utils.Jobs (JobHandle, MonadJobStatus(..))
+import Gargantext.Prelude.Config (GargConfig(..))
+import Gargantext.Utils.Jobs.Monad (JobHandle, MonadJobStatus(..))
 import Network.HTTP.Client
-import Network.HTTP.Client.TLS
+import Network.HTTP.Client.TLS (tlsManagerSettings)
 import Prelude qualified
 
 langToSearx :: Lang -> Text
@@ -167,7 +166,7 @@ triggerSearxSearch :: ( MonadBase IO m
                       , MonadJobStatus m )
                    => User
                    -> CorpusId
-                   -> API.RawQuery
+                   -> Query.RawQuery
                    -> Lang
                    -> JobHandle m
                    -> m ()
@@ -195,7 +194,7 @@ triggerSearxSearch user cId q l jobHandle = do
                 res <- liftBase $ fetchSearxPage $ FetchSearxParams { _fsp_language = l
                                                                     , _fsp_manager = manager
                                                                     , _fsp_pageno = page
-                                                                    , _fsp_query = API.getRawQuery q
+                                                                    , _fsp_query = Query.getRawQuery q
                                                                     , _fsp_url = surl }
 
                 insertSearxResponse user cId listId l res
diff --git a/src/Gargantext/API/Node/Corpus/Types.hs b/src/Gargantext/API/Node/Corpus/Types.hs
index b4d7ea468f4d5979cd195bc35bdf3b6063d43e30..76aa123037a1df408dcba09720962ace09dad775 100644
--- a/src/Gargantext/API/Node/Corpus/Types.hs
+++ b/src/Gargantext/API/Node/Corpus/Types.hs
@@ -13,17 +13,16 @@ Portability : POSIX
 
 module Gargantext.API.Node.Corpus.Types where
 
-import Control.Lens hiding (elements, Empty)
+import Control.Lens ( (?~) )
 import Control.Monad.Fail (fail)
-import Data.Aeson
-import Data.Aeson.TH (deriveJSON)
+import Data.Aeson ( Value(..), (.:), withText, object )
 import Data.Swagger
 import Data.Text qualified as T
 import Gargantext.API.Admin.Orchestrator.Types qualified as Types
 import Gargantext.Core.Utils.Prefix (unPrefix)
-import Gargantext.Database.Action.Flow (DataOrigin(..))
+import Gargantext.Database.Action.Flow.Types (DataOrigin(..))
 import Gargantext.Prelude
-import Test.QuickCheck
+import Test.QuickCheck (Arbitrary(..), oneof, arbitraryBoundedEnum)
 
 data Database = Empty
               | OpenAlex
diff --git a/src/Gargantext/API/Node/DocumentUpload.hs b/src/Gargantext/API/Node/DocumentUpload.hs
index b14031987c669bf7e893e118a02fc48fccb7643e..8b5a107abee605686aa48fde7d6183ed36a2c68a 100644
--- a/src/Gargantext/API/Node/DocumentUpload.hs
+++ b/src/Gargantext/API/Node/DocumentUpload.hs
@@ -16,8 +16,8 @@ Portability : POSIX
 
 module Gargantext.API.Node.DocumentUpload where
 
-import Control.Lens (makeLenses, view)
-import Data.Aeson
+import Control.Lens (view)
+import Data.Aeson ( Options(..), genericParseJSON, defaultOptions, genericToJSON, SumEncoding(..) )
 import Data.Swagger (ToSchema)
 import Data.Text qualified as T
 import Gargantext.API.Admin.EnvTypes (GargJob(..), Env)
diff --git a/src/Gargantext/API/Node/DocumentsFromWriteNodes.hs b/src/Gargantext/API/Node/DocumentsFromWriteNodes.hs
index e4bb56062498f62cd0af387cd607b4d6108e34e4..15ffbe96b1b4e18bd631594ed7bc0ab47458fed3 100644
--- a/src/Gargantext/API/Node/DocumentsFromWriteNodes.hs
+++ b/src/Gargantext/API/Node/DocumentsFromWriteNodes.hs
@@ -16,8 +16,7 @@ module Gargantext.API.Node.DocumentsFromWriteNodes
       where
 
 import Conduit ( yieldMany )
-import Control.Lens ((^.))
-import Data.Aeson ( genericParseJSON, defaultOptions, genericToJSON, FromJSON(parseJSON), ToJSON(toJSON) )
+import Data.Aeson ( genericParseJSON, defaultOptions, genericToJSON )
 import Data.List qualified as List
 import Data.Swagger ( ToSchema )
 import Data.Text qualified as T
diff --git a/src/Gargantext/API/Node/File.hs b/src/Gargantext/API/Node/File.hs
index f2e219bbf3250fb9b9411af10acc927f6720106c..7d5c0ce2e43830041c37240da9a825c1263945c6 100644
--- a/src/Gargantext/API/Node/File.hs
+++ b/src/Gargantext/API/Node/File.hs
@@ -17,35 +17,31 @@ Portability : POSIX
 
 module Gargantext.API.Node.File where
 
-import Control.Lens ((^.))
 import Data.ByteString qualified as BS
 import Data.ByteString.Lazy qualified as BSL
 import Data.MIME.Types qualified as DMT
-import Data.Swagger
+import Data.Swagger (ToSchema(..))
 import Data.Text qualified as T
-import Data.Text
-import Servant
-import qualified Gargantext.Database.GargDB as GargDB
-import qualified Network.HTTP.Media as M
-
-import Data.Either
-import Gargantext.API.Admin.Auth.Types
+import Gargantext.API.Admin.Auth.Types ( AuthenticatedUser, auth_user_id )
 import Gargantext.API.Admin.EnvTypes (GargJob(..), Env)
 import Gargantext.API.Admin.Orchestrator.Types (JobLog(..), AsyncJobs)
 import Gargantext.API.Admin.Types (HasSettings)
-import Gargantext.API.Errors.Types
-import Gargantext.API.Node.Types
-import Gargantext.API.Prelude
+import Gargantext.API.Errors.Types ( BackendInternalError )
+import Gargantext.API.Node.Types ( NewWithFile(NewWithFile) )
+import Gargantext.API.Prelude ( GargM, GargServer )
 import Gargantext.Core.Types (TODO)
-import Gargantext.Database.Action.Flow.Types
+import Gargantext.Database.Action.Flow.Types ( FlowCmdM )
 import Gargantext.Database.Action.Node (mkNodeWithParent)
-import Gargantext.Database.Admin.Types.Hyperdata.File
-import Gargantext.Database.Admin.Types.Node
+import Gargantext.Database.Admin.Types.Hyperdata.File ( HyperdataFile(..) )
+import Gargantext.Database.Admin.Types.Node ( NodeId, NodeType(..) )
+import Gargantext.Database.GargDB qualified as GargDB
 import Gargantext.Database.Query.Table.Node (getNodeWith)
 import Gargantext.Database.Query.Table.Node.UpdateOpaleye (updateHyperdata)
 import Gargantext.Database.Schema.Node (node_hyperdata)
 import Gargantext.Prelude
 import Gargantext.Utils.Jobs (serveJobsAPI, MonadJobStatus(..))
+import Network.HTTP.Media qualified as M
+import Servant
 
 data RESPONSE deriving Typeable
 
diff --git a/src/Gargantext/API/Node/FrameCalcUpload.hs b/src/Gargantext/API/Node/FrameCalcUpload.hs
index d1d21064b4bcb6fb8e7e88d33777c6fcb62c906c..0f3038f4ab895f8a6f3ce67a2469af3227d6500b 100644
--- a/src/Gargantext/API/Node/FrameCalcUpload.hs
+++ b/src/Gargantext/API/Node/FrameCalcUpload.hs
@@ -15,8 +15,6 @@ Portability : POSIX
 
 module Gargantext.API.Node.FrameCalcUpload where
 
-import Control.Lens ((^.))
-import Data.Aeson ( FromJSON, ToJSON )
 import Data.ByteString.Lazy qualified as BSL
 import Data.ByteString.UTF8 qualified as BSU8
 import Data.Swagger ( ToSchema )
diff --git a/src/Gargantext/API/Node/Share.hs b/src/Gargantext/API/Node/Share.hs
index 998c7131ee12d9c56928fa22a3107824b4f72064..97df5bb4ef9fe969224b8860e8b93c7df87ea2b1 100644
--- a/src/Gargantext/API/Node/Share.hs
+++ b/src/Gargantext/API/Node/Share.hs
@@ -63,8 +63,8 @@ api :: (HasNodeError err, HasNLPServer env, CmdRandom env err m)
 api userInviting nId (ShareTeamParams user') = do
   let user'' = Text.toLower user'
   user <- case guessUserName user'' of
-    Nothing    -> pure user''
-    Just (u,_) -> do
+    Nothing     -> pure user''
+    Just (u, _) -> do
       isRegistered <- getUserId' (UserName u)
       case isRegistered of
         Right _  -> do
@@ -72,7 +72,7 @@ api userInviting nId (ShareTeamParams user') = do
           pure u
         Left _err -> do
           username' <- getUsername userInviting
-          _ <- case List.elem username' arbitraryUsername of
+          _ <- case username' `List.elem` arbitraryUsername of
             True  -> do
               -- printDebug "[G.A.N.Share.api]" ("Demo users are not allowed to invite" :: Text)
               pure ()
diff --git a/src/Gargantext/API/Public.hs b/src/Gargantext/API/Public.hs
index 610e8e9716b3045b27277c81a3201e8f21ddb065..7bd489e0806eb4d0bff02466da9500f7e3ecf285 100644
--- a/src/Gargantext/API/Public.hs
+++ b/src/Gargantext/API/Public.hs
@@ -15,27 +15,28 @@ Portability : POSIX
 module Gargantext.API.Public
       where
 
-import Control.Lens ((^?), (^.), _Just)
-import Data.Aeson
+import Control.Lens ((^?), _Just)
+import Data.Aeson ( Options(sumEncoding), genericParseJSON, defaultOptions, genericToJSON )
 import Data.List qualified as List
 import Data.Map.Strict qualified as Map
 import Data.Set qualified as Set
-import Data.Swagger hiding (title, url)
-import Gargantext.API.Node.File
-import Gargantext.API.Prelude
+import Data.Swagger (ToSchema)
+import Gargantext.API.Node.File (FileApi, fileApi)
+import Gargantext.API.Prelude (serverError, GargServer)
 import Gargantext.Core.Utils.DateUtils (utc2year)
-import Gargantext.Database.Admin.Types.Hyperdata
+import Gargantext.Database.Admin.Types.Hyperdata.Corpus ( hc_fields )
+import Gargantext.Database.Admin.Types.Hyperdata.Folder ( HyperdataFolder )
 import Gargantext.Database.Admin.Types.Hyperdata.CorpusField
-import Gargantext.Database.Admin.Types.Node
+import Gargantext.Database.Admin.Types.Node ( NodeId(..), Node, unNodeId )
 import Gargantext.Database.Prelude (Cmd, DBCmd)
 import Gargantext.Database.Query.Table.Node.Error (HasNodeError(..))
 import Gargantext.Database.Query.Table.NodeNode (selectPublicNodes)
-import Gargantext.Database.Schema.Node -- (NodePoly(..))
+import Gargantext.Database.Schema.Node ( NodePoly(..), node_date, node_hyperdata ) -- (NodePoly(..))
 import Gargantext.Prelude
 import Gargantext.Utils.Aeson qualified as GUA
 import Servant
 import Test.QuickCheck (elements)
-import Test.QuickCheck.Arbitrary
+import Test.QuickCheck.Arbitrary ( Arbitrary(arbitrary) )
 
 ------------------------------------------------------------------------
 type API =  API_Home
diff --git a/src/Gargantext/API/Server.hs b/src/Gargantext/API/Server.hs
index 7a57b7c48b8a6235221ad2720552833687a53f42..ffcc5408732f3ddd6144c5b7f080017c6024b5f7 100644
--- a/src/Gargantext/API/Server.hs
+++ b/src/Gargantext/API/Server.hs
@@ -13,9 +13,10 @@ Portability : POSIX
 
 module Gargantext.API.Server where
 
-import Control.Lens ((^.))
 import Control.Monad.Catch (catch, throwM)
+import Data.ByteString.Lazy qualified as BL
 import Data.Text qualified as T
+import Data.Text.Encoding qualified as TE
 import Data.Version (showVersion)
 import Gargantext.API.Admin.Auth (auth, forgotPassword, forgotPasswordAsync)
 import Gargantext.API.Admin.Auth.Types (AuthContext)
@@ -24,20 +25,18 @@ import Gargantext.API.Admin.FrontEnd (frontEndServer)
 import Gargantext.API.Auth.PolicyCheck ()
 import Gargantext.API.Errors
 import Gargantext.API.GraphQL qualified as GraphQL
-import Gargantext.API.Prelude
+import Gargantext.API.Prelude (GargM, GargServer)
 import Gargantext.API.Public qualified as Public
-import Gargantext.API.Routes
+import Gargantext.API.Routes (API, GargVersion, GargAPI)
 import Gargantext.API.Swagger (swaggerDoc)
 import Gargantext.API.ThrowAll (serverPrivateGargAPI)
 import Gargantext.Database.Prelude (hasConfig)
 import Gargantext.Prelude hiding (Handler, catch)
 import Gargantext.Prelude.Config (gc_url_backend_api)
-import Gargantext.System.Logging
+import Gargantext.System.Logging (logLocM, LogLevel(..))
 import Paths_gargantext qualified as PG -- cabal magic build module
 import Servant
 import Servant.Swagger.UI (swaggerSchemaUIServer)
-import qualified Data.ByteString.Lazy as BL
-import qualified Data.Text.Encoding as TE
 
 
 serverGargAPI :: Text -> ServerT GargAPI (GargM Env BackendInternalError)
diff --git a/src/Gargantext/API/Table.hs b/src/Gargantext/API/Table.hs
index 3b0dbb3016237a4403a066c899eb1da21c9e5dcc..6e22dfbcc58ffa0d5f77cdc45342e7209834ebab 100644
--- a/src/Gargantext/API/Table.hs
+++ b/src/Gargantext/API/Table.hs
@@ -31,9 +31,7 @@ Node API
 module Gargantext.API.Table
   where
 
-import Data.Aeson.TH (deriveJSON)
-import Data.Maybe
-import Data.Swagger
+import Data.Swagger (ToSchema(..), genericDeclareNamedSchema)
 import Data.Text qualified as T
 import Gargantext.API.HashedResponse
 import Gargantext.API.Ngrams.Types (TabType(..))
diff --git a/src/Gargantext/Core/NodeStory.hs b/src/Gargantext/Core/NodeStory.hs
index 5cf695063a99d17d4e5e749cb1b20863ceb76b7e..44ffe15e6022ffc18b0da50479457af4698142f4 100644
--- a/src/Gargantext/Core/NodeStory.hs
+++ b/src/Gargantext/Core/NodeStory.hs
@@ -63,7 +63,7 @@ module Gargantext.Core.NodeStory
   , getParentsChildren )
 where
 
-import Control.Lens ((^.), (.~), (%~), non, _Just, at, over, view)
+import Control.Lens ((%~), non, _Just, at, over, view)
 import Data.Map.Strict qualified as Map
 import Data.Pool (Pool, withResource)
 import Data.Set qualified as Set
diff --git a/src/Gargantext/Core/NodeStory/DB.hs b/src/Gargantext/Core/NodeStory/DB.hs
index ba6d1ce3d4c09b63e4ddee0affd9ae92ae4e131d..97b85c626a457a85e0bd7ba0d08d2b29fcc0c5d4 100644
--- a/src/Gargantext/Core/NodeStory/DB.hs
+++ b/src/Gargantext/Core/NodeStory/DB.hs
@@ -25,7 +25,6 @@ module Gargantext.Core.NodeStory.DB
   , updateNodeStoryVersion )
 where
 
-import Control.Lens ((^.))
 import Data.HashMap.Strict (HashMap)
 import Data.HashMap.Strict qualified as HashMap
 import Data.Map.Strict qualified as Map
@@ -41,7 +40,7 @@ import Gargantext.Database.Admin.Types.Node ( NodeId(..), NodeType )
 import Gargantext.Database.Admin.Config ()
 import Gargantext.Database.Schema.Ngrams ()
 import Gargantext.Prelude hiding (to)
-import Gargantext.Prelude.Database
+import Gargantext.Prelude.Database ( runPGSExecute, runPGSExecuteMany, runPGSQuery, runPGSReturning )
 
 
 nodeExists :: PGS.Connection -> NodeId -> IO Bool
diff --git a/src/Gargantext/Core/NodeStory/Types.hs b/src/Gargantext/Core/NodeStory/Types.hs
index e3d1bd1afde01321e81a54f4654cc7ce8711b867..7b2f0c094fbef829ec1ffe110c6944d72c55785b 100644
--- a/src/Gargantext/Core/NodeStory/Types.hs
+++ b/src/Gargantext/Core/NodeStory/Types.hs
@@ -48,7 +48,7 @@ module Gargantext.Core.NodeStory.Types
 where
 
 import Codec.Serialise.Class ( Serialise )
-import Control.Lens (makeLenses, Getter, (^.))
+import Control.Lens (Getter)
 import Data.Aeson hiding ((.=), decode)
 import Data.Map.Strict qualified as Map
 import Data.Profunctor.Product.TH (makeAdaptorAndInstance)
diff --git a/src/Gargantext/Core/Text/Corpus/Parsers/Date.hs b/src/Gargantext/Core/Text/Corpus/Parsers/Date.hs
index f99aa69123f657aa3104fd6864383492cf8510ad..2aaa7b4c1b006bfd29adf5d9c64335860b0550cb 100644
--- a/src/Gargantext/Core/Text/Corpus/Parsers/Date.hs
+++ b/src/Gargantext/Core/Text/Corpus/Parsers/Date.hs
@@ -22,7 +22,7 @@ module Gargantext.Core.Text.Corpus.Parsers.Date
 {-(parse, parseRaw, dateSplit, Year, Month, Day)-}
   where
 
-import Data.Aeson (toJSON, Value)
+import Data.Aeson (Value)
 import Data.Aeson qualified as Json
 import Data.Aeson.KeyMap as KM hiding (map)
 import Data.HashSet qualified as HashSet
@@ -30,16 +30,14 @@ import Data.List qualified as List
 import Data.Text (unpack, splitOn, replace)
 import Data.Time (defaultTimeLocale, iso8601DateFormat, parseTimeM, toGregorian)
 import Data.Time.Calendar qualified as DTC
-import Data.Time.Clock ( secondsToDiffTime)
-import Data.Time.Clock (UTCTime(..))  -- , getCurrentTime)
+import Data.Time.Clock (UTCTime(..), secondsToDiffTime)  -- , getCurrentTime)
 import Data.Time.LocalTime (utc)
 import Data.Time.LocalTime.TimeZone.Series (zonedTimeToZoneSeriesTime)
 import Duckling.Api (analyze)
 import Duckling.Core (makeLocale, Dimension(Time))
 import Duckling.Core qualified as DC
 import Duckling.Resolve (fromUTC, Context(Context, referenceTime, locale), DucklingTime(DucklingTime), Options(..))
-import Duckling.Types (ResolvedToken(..), ResolvedVal(..))
-import Duckling.Types (Seal(..))
+import Duckling.Types (ResolvedToken(..), ResolvedVal(..), Seal(..))
 import Gargantext.Core (Lang(FR,EN))
 -- import Gargantext.Core.Types (DebugMode(..), withDebugMode)
 import Gargantext.Prelude hiding (replace)
diff --git a/src/Gargantext/Core/Text/Corpus/Parsers/Gitlab.hs b/src/Gargantext/Core/Text/Corpus/Parsers/Gitlab.hs
index 065a9004f3498bbf5f1012313d86e970ddd382da..c5c0629e39f5ad64a849f2e50d9259a8f1e1d331 100644
--- a/src/Gargantext/Core/Text/Corpus/Parsers/Gitlab.hs
+++ b/src/Gargantext/Core/Text/Corpus/Parsers/Gitlab.hs
@@ -13,7 +13,7 @@ module Gargantext.Core.Text.Corpus.Parsers.Gitlab (
   Issue(..), gitlabIssue2hyperdataDocument, readFile_Issues, readFile_IssuesAsDocs
 ) where
 
-import Data.Aeson ( FromJSON(parseJSON), decode, (.:), (.:?), withObject )
+import Data.Aeson ( decode, (.:), (.:?), withObject )
 import Data.ByteString.Lazy qualified as DBL
 import Data.Text qualified as DT
 import Data.Time
diff --git a/src/Gargantext/Core/Text/Corpus/Parsers/GrandDebat.hs b/src/Gargantext/Core/Text/Corpus/Parsers/GrandDebat.hs
index 92dcaede8decb063bb781c5c37b05ac5ce4c200f..b9e23114b599151fd4d0cc71d614cc0edd2de280 100644
--- a/src/Gargantext/Core/Text/Corpus/Parsers/GrandDebat.hs
+++ b/src/Gargantext/Core/Text/Corpus/Parsers/GrandDebat.hs
@@ -26,7 +26,6 @@ _flowCorpusDebat u n l fp = do
 module Gargantext.Core.Text.Corpus.Parsers.GrandDebat
   where
 
-import Data.Aeson (ToJSON, FromJSON)
 import Data.ByteString.Lazy qualified as DBL
 import Data.JsonStream.Parser qualified as P
 import Data.Text qualified as Text
diff --git a/src/Gargantext/Core/Text/Corpus/Parsers/Isidore.hs b/src/Gargantext/Core/Text/Corpus/Parsers/Isidore.hs
index 02a6e8e8b013411bdd8d959b3eadbfaf6ad1d7b8..0516059801712fa9ec9077949e5b38d4d2fa1934 100644
--- a/src/Gargantext/Core/Text/Corpus/Parsers/Isidore.hs
+++ b/src/Gargantext/Core/Text/Corpus/Parsers/Isidore.hs
@@ -20,7 +20,6 @@ TODO:
 
 module Gargantext.Core.Text.Corpus.Parsers.Isidore where
 
-import Control.Lens ( (^.), (.~) )
 import Data.ByteString.Lazy (ByteString)
 import Data.RDF ( Node(LNode, UNode), LValue(PlainLL, TypedL, PlainL) )
 import Data.Text qualified as T
diff --git a/src/Gargantext/Core/Text/Corpus/Parsers/Json2Csv.hs b/src/Gargantext/Core/Text/Corpus/Parsers/Json2Csv.hs
index f0f0aa828461368d678222f95e40b0d4a315cabf..a847799f145b36b9b5970ff9394ebdf102df9216 100644
--- a/src/Gargantext/Core/Text/Corpus/Parsers/Json2Csv.hs
+++ b/src/Gargantext/Core/Text/Corpus/Parsers/Json2Csv.hs
@@ -17,8 +17,7 @@ Json parser to export towoard CSV GargV3 format.
 module Gargantext.Core.Text.Corpus.Parsers.Json2Csv (json2csv, readPatents)
   where
 
-import Data.Aeson
-import Data.Aeson.TH (deriveJSON)
+import Data.Aeson ( decode )
 import Data.ByteString.Lazy (readFile)
 import Data.Text (unpack)
 import Data.Vector (fromList)
diff --git a/src/Gargantext/Core/Text/Corpus/Parsers/Wikidata.hs b/src/Gargantext/Core/Text/Corpus/Parsers/Wikidata.hs
index 6fe6177516c4fd3c2bbec9af1a9b3c7fd22b66d1..66a443e0c5bec5de0eb22463159304ff0dc6380d 100644
--- a/src/Gargantext/Core/Text/Corpus/Parsers/Wikidata.hs
+++ b/src/Gargantext/Core/Text/Corpus/Parsers/Wikidata.hs
@@ -18,7 +18,6 @@ Portability : POSIX
 
 module Gargantext.Core.Text.Corpus.Parsers.Wikidata where
 
-import Control.Lens (makeLenses, (^.) )
 import Data.List qualified as List
 import Data.Text (concat)
 import Database.HSparql.Connection ( BindingValue, EndPoint, selectQueryRaw )
diff --git a/src/Gargantext/Core/Text/List/Group/Prelude.hs b/src/Gargantext/Core/Text/List/Group/Prelude.hs
index 20b373eb99f8d8f6d1a481e00247e343e9edcfcf..fdbb84455063878e80608106b6919d8c0ed694bd 100644
--- a/src/Gargantext/Core/Text/List/Group/Prelude.hs
+++ b/src/Gargantext/Core/Text/List/Group/Prelude.hs
@@ -16,11 +16,10 @@ Portability : POSIX
 module Gargantext.Core.Text.List.Group.Prelude
   where
 
-import Control.Lens (makeLenses, view, set, over)
+import Control.Lens (view, set, over)
 import Data.HashMap.Strict (HashMap)
 import Data.HashMap.Strict qualified as HashMap
 import Data.List qualified as List
-import Data.Monoid
 import Data.Semigroup
 import Data.Set qualified as Set
 import Gargantext.API.Ngrams.Types (NgramsElement, mkNgramsElement, NgramsTerm(..), RootParent(..), mSetFromList)
diff --git a/src/Gargantext/Core/Text/List/Group/WithStem.hs b/src/Gargantext/Core/Text/List/Group/WithStem.hs
index f3b39734fdab6cb7026cdb38b00b92ab800668f8..d57e6da2bebd5e54d55d924739352e3b1fd65b85 100644
--- a/src/Gargantext/Core/Text/List/Group/WithStem.hs
+++ b/src/Gargantext/Core/Text/List/Group/WithStem.hs
@@ -17,7 +17,6 @@ Portability : POSIX
 module Gargantext.Core.Text.List.Group.WithStem
   where
 
-import Control.Lens (makeLenses)
 import Data.HashMap.Strict (HashMap)
 import Data.HashMap.Strict qualified as HashMap
 import Data.HashSet (HashSet)
diff --git a/src/Gargantext/Core/Text/Metrics.hs b/src/Gargantext/Core/Text/Metrics.hs
index c09cfc1b3bbb6c71d30c22b00ca455cec2817106..01171953ddab6484ab1d9e90e2ad77d4e4b794cc 100644
--- a/src/Gargantext/Core/Text/Metrics.hs
+++ b/src/Gargantext/Core/Text/Metrics.hs
@@ -16,7 +16,6 @@ Mainly reexport functions in @Data.Text.Metrics@
 module Gargantext.Core.Text.Metrics
   where
 
-import Control.Lens (makeLenses)
 import Data.Array.Accelerate qualified as DAA
 import Data.Array.Accelerate.Interpreter qualified as DAA
 import Data.HashMap.Strict (HashMap)
diff --git a/src/Gargantext/Core/Text/Metrics/Count.hs b/src/Gargantext/Core/Text/Metrics/Count.hs
index 62a8b71a93fb68c70b9575a8041af85ebde3c5ba..909ee27dbd699b940f81329f4557070fec31f86a 100644
--- a/src/Gargantext/Core/Text/Metrics/Count.hs
+++ b/src/Gargantext/Core/Text/Metrics/Count.hs
@@ -32,7 +32,7 @@ import Data.List qualified as List
 import Data.Map.Strict  ( empty, singleton , insertWith, unionWith, unionsWith , mapKeys )
 import Data.Map.Strict qualified as DMS
 import Data.Text (pack)
-import Gargantext.Core.Types
+import Gargantext.Core.Types (Terms(..), Stems)
 import Gargantext.Prelude hiding (empty)
 
 ------------------------------------------------------------------------
diff --git a/src/Gargantext/Core/Text/Ngrams.hs b/src/Gargantext/Core/Text/Ngrams.hs
index 5b032b78877348a230df1d566161d75e52d88c34..50993caf5e14f45786f6da549b9548e28df522dc 100644
--- a/src/Gargantext/Core/Text/Ngrams.hs
+++ b/src/Gargantext/Core/Text/Ngrams.hs
@@ -20,7 +20,7 @@ module Gargantext.Core.Text.Ngrams
   
 import Codec.Serialise (Serialise())
 import Control.Lens (over)
-import Data.Aeson ( ToJSON(..), FromJSON(..), FromJSONKey(..), FromJSONKeyFunction(..), Value(String), ToJSONKey(..) )
+import Data.Aeson ( FromJSONKey(..), FromJSONKeyFunction(..), Value(String), ToJSONKey(..) )
 import Data.Aeson.Types (toJSONKeyText)
 import Data.Text (pack)
 import Database.PostgreSQL.Simple qualified as PGS
diff --git a/src/Gargantext/Core/Text/Terms.hs b/src/Gargantext/Core/Text/Terms.hs
index 2064b99cf1a1e122e9874bb40c26056a62fe998a..c022dd3ca9eee4237586489f25b213bdde517787 100644
--- a/src/Gargantext/Core/Text/Terms.hs
+++ b/src/Gargantext/Core/Text/Terms.hs
@@ -37,7 +37,7 @@ compute graph
 module Gargantext.Core.Text.Terms
   where
 
-import Control.Lens ( (^.), view, over, makeLenses )
+import Control.Lens ( view, over )
 import Data.HashMap.Strict (HashMap)
 import Data.HashMap.Strict qualified as HashMap
 import Data.List qualified as List
diff --git a/src/Gargantext/Core/Text/Terms/Multi/PosTagging/Types.hs b/src/Gargantext/Core/Text/Terms/Multi/PosTagging/Types.hs
index 6f94e115ecdbdab023f5f9dab3b61cbe1ea2e854..0ab3ab1f5a5c89f55133b06f56b0c31a2afcb3ea 100644
--- a/src/Gargantext/Core/Text/Terms/Multi/PosTagging/Types.hs
+++ b/src/Gargantext/Core/Text/Terms/Multi/PosTagging/Types.hs
@@ -15,8 +15,7 @@ Portability : POSIX
 
 module Gargantext.Core.Text.Terms.Multi.PosTagging.Types where
 
-import Data.Aeson.TH (deriveJSON)
-import Gargantext.Core.Types
+import Gargantext.Core.Types ( NER, POS )
 import Gargantext.Core.Utils.Prefix (unPrefix)
 import Gargantext.Prelude
 
diff --git a/src/Gargantext/Core/Types.hs b/src/Gargantext/Core/Types.hs
index a9df8b9f7425536e4b8ece8fc2d032d14139b4db..b4f27bb14a65e1e888dc2e5aca1133170c3abfc5 100644
--- a/src/Gargantext/Core/Types.hs
+++ b/src/Gargantext/Core/Types.hs
@@ -31,19 +31,12 @@ module Gargantext.Core.Types ( module Gargantext.Core.Types.Main
                              , TODO(..)
                              ) where
 
-import Control.Lens (Prism', (#), makeLenses, over)
-import Data.Aeson
-import Data.Aeson.TH (deriveJSON)
-import Data.Maybe
-import Data.Monoid
-import Data.Semigroup
+import Control.Lens (Prism', (#), over)
+import Data.Aeson ( withText )
 import Data.Set (empty)
-import Data.String
-import Data.Swagger (ToParamSchema)
-import Data.Swagger (ToSchema(..))
+import Data.Swagger (ToParamSchema, ToSchema(..))
 import Data.Text (unpack)
-import Data.Validity
-import GHC.Generics
+import Data.Validity ( validationIsValid, Validation )
 import Gargantext.Core.Types.Main
 import Gargantext.Core.Utils.Prefix (unPrefix, wellNamedSchema)
 import Gargantext.Database.Admin.Types.Node
diff --git a/src/Gargantext/Core/Types/Main.hs b/src/Gargantext/Core/Types/Main.hs
index 01e9f534308b3573b51d15fa5d74af1841159d91..126bc56cd94150d7a5aa73c020932c3fdc98b565 100644
--- a/src/Gargantext/Core/Types/Main.hs
+++ b/src/Gargantext/Core/Types/Main.hs
@@ -17,12 +17,10 @@ Portability : POSIX
 module Gargantext.Core.Types.Main where
 ------------------------------------------------------------------------
 
-import Data.Aeson (FromJSON, ToJSON)
-import Data.Aeson.TH (deriveJSON)
 import Data.Bimap (Bimap)
-import Data.Swagger
+import Data.Swagger ( ToSchema(..), ToParamSchema, genericDeclareNamedSchema )
 import Data.Text (unpack, pack)
-import Gargantext.Core
+import Gargantext.Core ( HasDBid(..) )
 import Gargantext.Core.Utils.Prefix (unPrefix, unPrefixSwagger, wellNamedSchema)
 import Gargantext.Database.Admin.Types.Node  -- (NodeType(..), Node, Hyperdata(..))
 import Gargantext.Prelude
diff --git a/src/Gargantext/Core/Types/Phylo.hs b/src/Gargantext/Core/Types/Phylo.hs
index 8a827e645bd8fc86ba1937a4a8f83f72a410eb10..a467bac4e200631c59c28106e32801a76d59c1c5 100644
--- a/src/Gargantext/Core/Types/Phylo.hs
+++ b/src/Gargantext/Core/Types/Phylo.hs
@@ -27,22 +27,17 @@ Phylomemy was first described in Chavalarias, D., Cointet, J.-P., 2013. Phylomem
 
 module Gargantext.Core.Types.Phylo where
 
-import Control.DeepSeq
-import Control.Lens (makeLenses)
 import Control.Monad.Fail (fail)
-import Data.Aeson
-import Data.Aeson.TH (deriveJSON)
-import Data.Aeson.Types
-import Data.Maybe
-import Data.Monoid
-import Data.Swagger
+import Data.Aeson ( Value(..), (.:), (.:?), withObject, object, KeyValue((.=)) )
+import Data.Aeson.Types ( parseMaybe )
+import Data.Swagger ( NamedSchema(..), ToSchema(..), genericDeclareNamedSchema, defaultSchemaOptions )
 import Data.Text qualified as T
 import Data.Time.Clock.POSIX  (POSIXTime)
+import Data.TreeDiff ( ToExpr )
 import Gargantext.Core.Utils.Prefix (unPrefix, unPrefixSwagger)
 import Gargantext.Prelude
-import Test.QuickCheck
+import Test.QuickCheck ( Arbitrary(arbitrary), oneof, vectorOf )
 import Test.QuickCheck.Instances.Text()
-import Data.TreeDiff
 
 ------------------------------------------------------------------------
 -- | Phylo datatype descriptor of a phylomemy
diff --git a/src/Gargantext/Core/Viz/Graph/API.hs b/src/Gargantext/Core/Viz/Graph/API.hs
index 241dd0cf1dd5b391b931ffd85f32c098accbf784..ded2b92604f3e19a3f3bf45e37f952ae9ecfa943 100644
--- a/src/Gargantext/Core/Viz/Graph/API.hs
+++ b/src/Gargantext/Core/Viz/Graph/API.hs
@@ -18,8 +18,7 @@ Portability : POSIX
 module Gargantext.Core.Viz.Graph.API
   where
 
-import Control.Lens (set, (^.), _Just, (^?), at)
-import Data.Aeson ( ToJSON, FromJSON )
+import Control.Lens (set, _Just, (^?), at)
 import Data.HashMap.Strict qualified as HashMap
 import Data.Swagger ( ToSchema )
 import Gargantext.API.Admin.EnvTypes (GargJob(..), Env)
diff --git a/src/Gargantext/Core/Viz/Graph/Tools.hs b/src/Gargantext/Core/Viz/Graph/Tools.hs
index b6877a67c1d1169dca532eefc9c30e9856bdfa62..65677d42478abd7be5948643fadfec6e86d4b4df 100644
--- a/src/Gargantext/Core/Viz/Graph/Tools.hs
+++ b/src/Gargantext/Core/Viz/Graph/Tools.hs
@@ -17,7 +17,6 @@ Portability : POSIX
 module Gargantext.Core.Viz.Graph.Tools
   where
 
-import Data.Aeson ( ToJSON, FromJSON )
 import Data.HashMap.Strict (HashMap)
 import Data.HashMap.Strict qualified as HashMap
 import Data.HashSet qualified as HashSet
diff --git a/src/Gargantext/Core/Viz/Graph/Types.hs b/src/Gargantext/Core/Viz/Graph/Types.hs
index 9b7ae84707cd6e4013d8bd8576512ebc6ba702b5..59616d557c07b6051f92bc2deedbea58b5c81db2 100644
--- a/src/Gargantext/Core/Viz/Graph/Types.hs
+++ b/src/Gargantext/Core/Viz/Graph/Types.hs
@@ -14,9 +14,6 @@ Portability : POSIX
 module Gargantext.Core.Viz.Graph.Types
   where
 
-import Control.Lens (makeLenses)
-import Data.Aeson (FromJSON, ToJSON)
-import Data.Aeson.TH (deriveJSON)
 import Data.HashSet (HashSet)
 import Data.HashSet qualified as HashSet
 import Data.Swagger (ToSchema(..), genericDeclareNamedSchema)
diff --git a/src/Gargantext/Core/Viz/LegacyPhylo.hs b/src/Gargantext/Core/Viz/LegacyPhylo.hs
index a4ff22e20638e94cc43dce0498bb03e510297d42..106dea9c7d4c35b9c575bfe47dfe1cb1a2691e41 100644
--- a/src/Gargantext/Core/Viz/LegacyPhylo.hs
+++ b/src/Gargantext/Core/Viz/LegacyPhylo.hs
@@ -27,9 +27,7 @@ one 8, e54847.
 
 module Gargantext.Core.Viz.LegacyPhylo where
 
-import Control.DeepSeq
-import Control.Lens (makeLenses)
-import Data.Aeson.TH (deriveJSON,defaultOptions)
+import Data.Aeson.TH (defaultOptions)
 import Data.Swagger
 import Data.Vector  (Vector)
 import Gargantext.Core.Text.Context (TermList)
diff --git a/src/Gargantext/Core/Viz/Phylo.hs b/src/Gargantext/Core/Viz/Phylo.hs
index 5d383cbfc49a29c8f9ee4228d8230ae15d14c68e..ffc2656dfdb87356f0c6636831e2ae810e796d4e 100644
--- a/src/Gargantext/Core/Viz/Phylo.hs
+++ b/src/Gargantext/Core/Viz/Phylo.hs
@@ -26,17 +26,12 @@ one 8, e54847.
 
 module Gargantext.Core.Viz.Phylo where
 
-import Control.DeepSeq
-import Control.Lens (makeLenses)
-import Data.Aeson
-import Data.Aeson.TH (deriveJSON)
 import Data.Swagger
 import Data.Text (pack)
 import Data.Text.Lazy qualified as TextLazy
-import Data.TreeDiff
+import Data.TreeDiff (ToExpr)
 import Data.Vector (Vector)
-import Gargantext.Core.Utils.Prefix (unPrefix)
-import Gargantext.Core.Utils.Prefix (unPrefixSwagger)
+import Gargantext.Core.Utils.Prefix (unPrefix, unPrefixSwagger)
 import Gargantext.Prelude
 import Test.QuickCheck
 import Test.QuickCheck.Instances.Text()
diff --git a/src/Gargantext/Database/Action/Delete.hs b/src/Gargantext/Database/Action/Delete.hs
index 4f4337bffd3b1c817089ffd142bba90381d51182..2c75ab9ca554e2c4eea4c368aa1923456c045a8a 100644
--- a/src/Gargantext/Database/Action/Delete.hs
+++ b/src/Gargantext/Database/Action/Delete.hs
@@ -17,23 +17,21 @@ TODO: NodeError
 module Gargantext.Database.Action.Delete
   where
 
-import Control.Lens     (view, (^.))
-import Data.Text
-import Servant
-
-import Gargantext.Core
+import Control.Lens (view)
+import Data.Text (unpack)
+import Gargantext.Core (HasDBid(..))
 import Gargantext.Core.Types.Individu (User(..))
 import Gargantext.Database.Action.Share (delFolderTeam)
 import Gargantext.Database.Action.User (getUserId)
-import Gargantext.Database.Admin.Types.Hyperdata.File
-import Gargantext.Database.Admin.Types.Node -- (NodeType(..))
+import Gargantext.Database.Admin.Types.Hyperdata.File ( HyperdataFile(..) )
+import Gargantext.Database.Admin.Types.Node ( NodeId, NodeType(..) ) -- (NodeType(..))
+import Gargantext.Database.GargDB qualified as GargDB
 import Gargantext.Database.Prelude (Cmd', CmdCommon)
 import Gargantext.Database.Query.Table.Node (getNodeWith)
+import Gargantext.Database.Query.Table.Node qualified as N (getNode, deleteNode)
 import Gargantext.Database.Query.Table.Node.Error (HasNodeError)
 import Gargantext.Database.Schema.Node
 import Gargantext.Prelude
-import qualified Gargantext.Database.GargDB as GargDB
-import qualified Gargantext.Database.Query.Table.Node as N (getNode, deleteNode)
 
 ------------------------------------------------------------------------
 -- TODO
diff --git a/src/Gargantext/Database/Action/Flow.hs b/src/Gargantext/Database/Action/Flow.hs
index 87e1296b7c8ba1f3b8d1e78f092eb4a704566cd8..5afcf32b3213ecc32c01d7814912e3ac839fee1f 100644
--- a/src/Gargantext/Database/Action/Flow.hs
+++ b/src/Gargantext/Database/Action/Flow.hs
@@ -51,7 +51,7 @@ module Gargantext.Database.Action.Flow -- (flowDatabase, ngrams2list)
     where
 
 import Conduit
-import Control.Lens ( (^.), to, view, over )
+import Control.Lens ( to, view, over )
 import Data.Bifunctor qualified as B
 import Data.Conduit qualified as C
 import Data.Conduit.Internal (zipSources)
diff --git a/src/Gargantext/Database/Action/Flow/Extract.hs b/src/Gargantext/Database/Action/Flow/Extract.hs
index e993c9cad9624c4681965967225f2ab6d2df82b5..0504bb5971e1835b4aaeeb95175e28ae411e3827 100644
--- a/src/Gargantext/Database/Action/Flow/Extract.hs
+++ b/src/Gargantext/Database/Action/Flow/Extract.hs
@@ -17,7 +17,7 @@ Portability : POSIX
 module Gargantext.Database.Action.Flow.Extract
     where
 
-import Control.Lens ((^.), _Just, view)
+import Control.Lens (_Just, view)
 import Data.HashMap.Strict qualified as HashMap
 import Data.Map.Strict qualified as DM
 import Gargantext.Core (Lang, NLPServerConfig(server))
diff --git a/src/Gargantext/Database/Action/Flow/List.hs b/src/Gargantext/Database/Action/Flow/List.hs
index 028abec206f5a717e9f2401392928fe72b4913ea..3fba7766f897f9f444dd488f8522700486af4f62 100644
--- a/src/Gargantext/Database/Action/Flow/List.hs
+++ b/src/Gargantext/Database/Action/Flow/List.hs
@@ -15,8 +15,7 @@ Portability : POSIX
 module Gargantext.Database.Action.Flow.List
     where
 
-import Control.Lens ((^.), (+~), (%~), at, (.~))
-import Control.Monad.Reader
+import Control.Lens ((+~), (%~), at)
 import Data.List qualified as List
 import Data.Map.Strict (toList)
 import Data.Map.Strict qualified as Map
@@ -28,7 +27,7 @@ import Gargantext.Core.NodeStory (HasNodeStory, a_history, a_state, a_version)
 import Gargantext.Core.Text.Ngrams (NgramsType(..))
 import Gargantext.Core.Types (HasValidationError(..), assertValid)
 import Gargantext.Core.Types.Main (ListType(CandidateTerm))
-import Gargantext.Database.Admin.Types.Node
+import Gargantext.Database.Admin.Types.Node (ListId, NodeId)
 import Gargantext.Database.Query.Table.NodeNgrams (NodeNgramsPoly(..), NodeNgramsW, listInsertDb,{- getCgramsId -})
 import Gargantext.Prelude hiding (toList)
 
diff --git a/src/Gargantext/Database/Action/Flow/Pairing.hs b/src/Gargantext/Database/Action/Flow/Pairing.hs
index a02ebc78ae504a3ac3243df49e8ce53a143f554e..682e772c5eeffdac5b5c56aff69dfee8444eb333 100644
--- a/src/Gargantext/Database/Action/Flow/Pairing.hs
+++ b/src/Gargantext/Database/Action/Flow/Pairing.hs
@@ -17,7 +17,7 @@ module Gargantext.Database.Action.Flow.Pairing
   -- (pairing)
     where
 
-import Control.Lens (_Just, (^.), view)
+import Control.Lens (_Just, view)
 import Data.HashMap.Strict (HashMap)
 import Data.HashMap.Strict qualified as HM
 import Data.HashMap.Strict qualified as HashMap
diff --git a/src/Gargantext/Database/Action/Flow/Types.hs b/src/Gargantext/Database/Action/Flow/Types.hs
index 8193e8047137b99e0c47ac55c3f8e940e4d1220f..477938cfe9f1f027eeef75df9b2e85ed0186825e 100644
--- a/src/Gargantext/Database/Action/Flow/Types.hs
+++ b/src/Gargantext/Database/Action/Flow/Types.hs
@@ -18,9 +18,6 @@ module Gargantext.Database.Action.Flow.Types
     where
 
 import Conduit (ConduitT)
-import Control.Lens (makeLenses)
-import Data.Aeson (ToJSON)
-import Data.Aeson.TH (deriveJSON)
 import Data.HashMap.Strict (HashMap)
 import Data.Swagger (ToSchema(..), genericDeclareNamedSchema)
 import Gargantext.Core.Flow.Types ( UniqId )
diff --git a/src/Gargantext/Database/Action/Flow/Utils.hs b/src/Gargantext/Database/Action/Flow/Utils.hs
index 76651b72771bc329f462985fd283dbf4b35ef67a..6f4ee34626d7ed3cc234c22bc52a48ef9104b1e4 100644
--- a/src/Gargantext/Database/Action/Flow/Utils.hs
+++ b/src/Gargantext/Database/Action/Flow/Utils.hs
@@ -19,7 +19,6 @@ module Gargantext.Database.Action.Flow.Utils
   , mapNodeIdNgrams )
 where
 
-import Control.Lens ((^.))
 import Data.HashMap.Strict (HashMap)
 import Data.HashMap.Strict qualified as HashMap
 import Data.List qualified as List
@@ -37,7 +36,7 @@ import Gargantext.Database.Action.Flow.Types (DocumentIdWithNgrams(..), FlowInse
 import Gargantext.Database.Admin.Types.Hyperdata.Document ( HyperdataDocument, hd_abstract, hd_title )
 import Gargantext.Database.Admin.Types.Node
 import Gargantext.Database.Prelude (DBCmd, DbCmd')
-import Gargantext.Database.Query.Table.ContextNodeNgrams
+import Gargantext.Database.Query.Table.ContextNodeNgrams ( ContextNodeNgramsPoly(..), insertContextNodeNgrams )
 import Gargantext.Database.Query.Table.Node.Document.Add qualified as Doc (add)
 import Gargantext.Database.Query.Table.Node.Document.Insert (ReturnId, addUniqId, insertDb, reId, reInserted, reUniqId)
 import Gargantext.Database.Query.Table.Node.Error (HasNodeError(..))
diff --git a/src/Gargantext/Database/Action/Search.hs b/src/Gargantext/Database/Action/Search.hs
index 491d77c48dac53551b65373a09a7b28a10744c24..ac8407e38a39e0576f2d6b6a229f9df6375fb6a6 100644
--- a/src/Gargantext/Database/Action/Search.hs
+++ b/src/Gargantext/Database/Action/Search.hs
@@ -22,7 +22,7 @@ module Gargantext.Database.Action.Search (
   ) where
 
 import Control.Arrow (returnA)
-import Control.Lens ((^.), view)
+import Control.Lens (view)
 import Data.BoolExpr ( BoolExpr(..), Signed(Negative, Positive) )
 import Data.List qualified as List
 import Data.Map.Strict qualified as Map
diff --git a/src/Gargantext/Database/Action/Share.hs b/src/Gargantext/Database/Action/Share.hs
index 38c78fa4fc6cf2663b8441bdc0aad44ad0145dc4..cc406376c823c23d6b663f1a4277e91c4f7aef8c 100644
--- a/src/Gargantext/Database/Action/Share.hs
+++ b/src/Gargantext/Database/Action/Share.hs
@@ -17,12 +17,12 @@ module Gargantext.Database.Action.Share
   where
 
 import Control.Arrow (returnA)
-import Control.Lens (view, (^.))
+import Control.Lens (view)
 import Gargantext.Core.Types.Individu (User(..))
 import Gargantext.Database
 import Gargantext.Database.Action.User (getUserId)
 import Gargantext.Database.Admin.Config (hasNodeType, isInNodeTypes)
-import Gargantext.Database.Admin.Types.Hyperdata (HyperdataAny(..))
+import Gargantext.Database.Admin.Types.Hyperdata.Any (HyperdataAny(..))
 import Gargantext.Database.Admin.Types.Node
 import Gargantext.Database.Query.Table.Node (getNode, getNodesWith)
 import Gargantext.Database.Query.Table.Node.Error (HasNodeError, errorWith)
diff --git a/src/Gargantext/Database/Action/User/New.hs b/src/Gargantext/Database/Action/User/New.hs
index 9a997b608e6c1d35dbbf8c4b9e90a377f29998f3..70fda20a4b5491c9e06b2bb2299df150aef26d07 100644
--- a/src/Gargantext/Database/Action/User/New.hs
+++ b/src/Gargantext/Database/Action/User/New.hs
@@ -96,15 +96,15 @@ mkNewUser emailAddress pass' =
   let  username = case guessUserName emailAddress of
         Just  (u', _m) -> u'
         Nothing        -> panic "[G.D.A.U.N.newUserQuick]: Email invalid"
-  in (NewUser username (Text.toLower emailAddress) pass')
+  in NewUser username (Text.toLower emailAddress) pass'
 
 ------------------------------------------------------------------------
 -- | guessUserName
 -- guess username and normalize it (Text.toLower)
 guessUserName :: Text -> Maybe (Text,Text)
 guessUserName n = case splitOn "@" n of
-    [u',m'] -> if m' /= "" then Just (Text.toLower u',m')
-                           else Nothing
+    [_u', ""] -> Nothing
+    [u', m']  -> Just (Text.toLower u', m')
     _       -> Nothing
 
 ------------------------------------------------------------------------
diff --git a/src/Gargantext/Database/Admin/Types/Node.hs b/src/Gargantext/Database/Admin/Types/Node.hs
index 975cac994cb6559af9d8620e2d70b0c9a8e55aef..83048b2d5f3d351968124f01de40e970932f6e45 100644
--- a/src/Gargantext/Database/Admin/Types/Node.hs
+++ b/src/Gargantext/Database/Admin/Types/Node.hs
@@ -12,7 +12,6 @@ Portability : POSIX
 {-# OPTIONS_GHC -fno-warn-orphans #-}
 
 {-# LANGUAGE BangPatterns               #-}
-{-# LANGUAGE DerivingStrategies         #-}
 {-# LANGUAGE DerivingVia                #-}
 {-# LANGUAGE TemplateHaskell            #-}
 {-# LANGUAGE TypeFamilies #-}
@@ -23,22 +22,20 @@ module Gargantext.Database.Admin.Types.Node
   where
 
 import Codec.Serialise (Serialise())
-import Data.Aeson
-import Data.Aeson.TH (deriveJSON)
+import Data.Aeson (FromJSONKey, ToJSONKey)
 import Data.Csv qualified as Csv
-import Data.Either
 import Data.Morpheus.Kind (SCALAR)
-import Data.Morpheus.Types
+import Data.Morpheus.Types ( DecodeScalar(..), EncodeScalar(..), GQLType(KIND) )
 import Data.Swagger
 import Data.Text (unpack, pack)
 import Data.Time (UTCTime)
 import Database.PostgreSQL.Simple.FromField (FromField, fromField, fromJSONField)
 import Database.PostgreSQL.Simple.ToField (ToField, toField, toJSONField)
 import Database.PostgreSQL.Simple.ToRow (ToRow, toRow)
-import Fmt
+import Fmt ( Buildable(..) )
 import Gargantext.Core.Utils.Prefix (unPrefix, unPrefixSwagger, wellNamedSchema)
 import Gargantext.Database.Schema.Context
-import Gargantext.Database.Schema.Node
+import Gargantext.Database.Schema.Node ( NodePoly(Node), NodePolySearch(NodeSearch) )
 import Gargantext.Prelude
 import Gargantext.Prelude.Crypto.Hash (Hash)
 import Opaleye (DefaultFromField, defaultFromField, SqlInt4, SqlText, SqlTSVector, Nullable, fromPGSFromField)
@@ -46,7 +43,7 @@ import Opaleye qualified as O
 import Prelude qualified
 import Servant hiding (Context)
 import Test.QuickCheck (elements, Positive (getPositive))
-import Test.QuickCheck.Arbitrary
+import Test.QuickCheck.Arbitrary ( Arbitrary(arbitrary) )
 import Test.QuickCheck.Instances.Text ()
 import Test.QuickCheck.Instances.Time ()
 import Text.Read (read)
diff --git a/src/Gargantext/Database/GargDB.hs b/src/Gargantext/Database/GargDB.hs
index 5177413f56dd4663b3be9ece20959288f53362ed..fe060f6dd6c6138d7830bc89e2493e5b8b3d32a8 100644
--- a/src/Gargantext/Database/GargDB.hs
+++ b/src/Gargantext/Database/GargDB.hs
@@ -12,23 +12,20 @@ TODO_2: quantitative tests (coded)
 
 -}
 
-{-# LANGUAGE QuasiQuotes #-}
-
 module Gargantext.Database.GargDB
   where
 
 import Control.Lens (view)
-import Data.Aeson (ToJSON, toJSON)
 import Data.Text qualified as Text
 import Data.Tuple.Extra (both)
 import Gargantext.Database.Prelude (HasConfig(..))
 import Gargantext.Prelude hiding (hash)
-import Gargantext.Prelude.Config
-import Gargantext.Prelude.Crypto.Hash
+import Gargantext.Prelude.Config ( gc_datafilepath )
+import Gargantext.Prelude.Crypto.Hash ( IsHashable(hash) )
 import Prelude qualified
 import System.Directory (createDirectoryIfMissing)
 import System.Directory qualified as SD
-import System.IO.Error
+import System.IO.Error ( isDoesNotExistError )
 import System.Random (newStdGen)
 
 -------------------------------------------------------------------
diff --git a/src/Gargantext/Database/Prelude.hs b/src/Gargantext/Database/Prelude.hs
index 5a1cf7b85526d8cf2925c9c890fcc7f32b06a5c1..69568989b183d9db42ad98145925a7fdf08a5174 100644
--- a/src/Gargantext/Database/Prelude.hs
+++ b/src/Gargantext/Database/Prelude.hs
@@ -9,19 +9,16 @@ Portability : POSIX
 
 -}
 
-{-# LANGUAGE Arrows #-}
 {-# LANGUAGE ConstraintKinds, ScopedTypeVariables #-}
 {-# LANGUAGE LambdaCase #-}
 
 module Gargantext.Database.Prelude where
 
-import Control.Exception
+import Control.Exception (throw)
 import Control.Lens (Getter, view)
-import Control.Monad.Except
-import Control.Monad.Random
-import Control.Monad.Reader
+import Control.Monad.Random ( MonadRandom )
 import Control.Monad.Trans.Control (MonadBaseControl)
-import Data.Aeson (Result(Error,Success), fromJSON, FromJSON)
+import Data.Aeson (Result(..))
 import Data.ByteString qualified as DB
 import Data.List qualified as DL
 import Data.Pool (Pool, withResource)
diff --git a/src/Gargantext/Database/Query/Table/Ngrams.hs b/src/Gargantext/Database/Query/Table/Ngrams.hs
index edc2c6d03c979fda9408c43d122e0275de132c30..5b06a67bbce52618cca86a5e634ee59898a768d6 100644
--- a/src/Gargantext/Database/Query/Table/Ngrams.hs
+++ b/src/Gargantext/Database/Query/Table/Ngrams.hs
@@ -23,7 +23,6 @@ module Gargantext.Database.Query.Table.Ngrams
   )
     where
 
-import Control.Lens ((^.))
 import Data.HashMap.Strict (HashMap)
 import Data.HashMap.Strict qualified as HashMap
 import Data.List qualified as List
diff --git a/src/Gargantext/Database/Query/Table/NgramsPostag.hs b/src/Gargantext/Database/Query/Table/NgramsPostag.hs
index 7891b6769c5880e53076e8aa3bafa7b9cbfdd144..c361b0447a7cd3fff982822c91e1c8cceb142b7a 100644
--- a/src/Gargantext/Database/Query/Table/NgramsPostag.hs
+++ b/src/Gargantext/Database/Query/Table/NgramsPostag.hs
@@ -18,7 +18,7 @@ TODO use Opaleye for the queries.
 module Gargantext.Database.Query.Table.NgramsPostag
     where
 
-import Control.Lens (view, (^.))
+import Control.Lens (view)
 import Data.HashMap.Strict (HashMap)
 import Data.HashMap.Strict qualified as HashMap
 import Data.List qualified as List
diff --git a/src/Gargantext/Database/Query/Table/Node.hs b/src/Gargantext/Database/Query/Table/Node.hs
index cc16dcf22fbb9e315e9edd4802f0bfc68c53fdb5..7de772db750b8424f1deb4c7407bf208763b0163 100644
--- a/src/Gargantext/Database/Query/Table/Node.hs
+++ b/src/Gargantext/Database/Query/Table/Node.hs
@@ -22,7 +22,7 @@ module Gargantext.Database.Query.Table.Node
 
 import Control.Arrow (returnA)
 import Control.Lens (set, view)
-import Data.Aeson ( encode, Value, ToJSON )
+import Data.Aeson ( encode, Value )
 import Database.PostgreSQL.Simple qualified as PGS
 import Database.PostgreSQL.Simple.SqlQQ (sql)
 import Gargantext.Core ( HasDBid(toDBid) )
diff --git a/src/Gargantext/Database/Query/Table/Node/Document/Insert.hs b/src/Gargantext/Database/Query/Table/Node/Document/Insert.hs
index bf77716d2832857569d6873581a28dcbd803afa4..ef29a5050d59086a12804c8581385f4d5accb225 100644
--- a/src/Gargantext/Database/Query/Table/Node/Document/Insert.hs
+++ b/src/Gargantext/Database/Query/Table/Node/Document/Insert.hs
@@ -57,7 +57,6 @@ the concatenation of the parameters defined by @shaParameters@.
 module Gargantext.Database.Query.Table.Node.Document.Insert
   where
 
-import Data.Aeson (toJSON, ToJSON)
 import Data.Text qualified as DT (pack, concat, take, filter, toLower)
 import Data.Time.Segment (jour)
 import Database.PostgreSQL.Simple (FromRow, Query, Only(..))
diff --git a/src/Gargantext/Database/Query/Table/Node/Error.hs b/src/Gargantext/Database/Query/Table/Node/Error.hs
index 5110e936d35b19768378a839e84fc92625ecb03e..e0db91fdbc2eff31fd58dcd9a9fe28adf5a43c03 100644
--- a/src/Gargantext/Database/Query/Table/Node/Error.hs
+++ b/src/Gargantext/Database/Query/Table/Node/Error.hs
@@ -27,7 +27,7 @@ module Gargantext.Database.Query.Table.Node.Error (
   ) where
 
 import Control.Lens (Prism', (#), (^?))
-import Data.Aeson ( object, ToJSON(toJSON) )
+import Data.Aeson (object)
 import Data.Text qualified as T
 import Gargantext.Core.Types.Individu ( renderUser, User, Username )
 import Gargantext.Database.Admin.Types.Node (ListId, NodeId(..), ContextId, UserId, ParentId)
diff --git a/src/Gargantext/Database/Query/Table/NodeContext.hs b/src/Gargantext/Database/Query/Table/NodeContext.hs
index b13bba9b11aba45f992efe1d325e0c51f99e2248..729c1762e555d50559cbbbe56caad66179cfc736 100644
--- a/src/Gargantext/Database/Query/Table/NodeContext.hs
+++ b/src/Gargantext/Database/Query/Table/NodeContext.hs
@@ -44,7 +44,7 @@ module Gargantext.Database.Query.Table.NodeContext
   where
 
 import Control.Arrow (returnA)
-import Control.Lens (view, (^.))
+import Control.Lens (view)
 import Data.Text (splitOn)
 import Data.Time (UTCTime)
 import Database.PostgreSQL.Simple qualified as PGS (In(..), Query, Only(..))
diff --git a/src/Gargantext/Database/Query/Table/NodeNode.hs b/src/Gargantext/Database/Query/Table/NodeNode.hs
index d066911ba0f7c362d212eb4f5bee0032c00dca82..5e1a2e476cb80dc09b93fecf338c5974dfb12461 100644
--- a/src/Gargantext/Database/Query/Table/NodeNode.hs
+++ b/src/Gargantext/Database/Query/Table/NodeNode.hs
@@ -33,7 +33,7 @@ module Gargantext.Database.Query.Table.NodeNode
   where
 
 import Control.Arrow (returnA)
-import Control.Lens ((^.), view)
+import Control.Lens (view)
 import Data.Text (splitOn)
 import Database.PostgreSQL.Simple qualified as PGS
 import Database.PostgreSQL.Simple.SqlQQ (sql)
diff --git a/src/Gargantext/Database/Query/Table/User.hs b/src/Gargantext/Database/Query/Table/User.hs
index 299196b9e0c2020c5867b3d5cd672c4914e0a1f5..632e98887f22016d466a3a7c0bcaecef086240ff 100644
--- a/src/Gargantext/Database/Query/Table/User.hs
+++ b/src/Gargantext/Database/Query/Table/User.hs
@@ -48,7 +48,7 @@ module Gargantext.Database.Query.Table.User
   where
 
 import Control.Arrow (returnA)
-import Control.Lens ((^.), (?~))
+import Control.Lens ((?~))
 import Data.List.NonEmpty qualified as NE
 import Data.Time (UTCTime)
 import Data.UUID qualified as UUID
diff --git a/src/Gargantext/Database/Query/Tree.hs b/src/Gargantext/Database/Query/Tree.hs
index d3344bed870319f1fabc3af0ca284880dc494740..1d1095ec833ef34fd8e37f42b1476af6122ae19f 100644
--- a/src/Gargantext/Database/Query/Tree.hs
+++ b/src/Gargantext/Database/Query/Tree.hs
@@ -43,15 +43,14 @@ module Gargantext.Database.Query.Tree
   )
   where
 
-import Control.Lens (view, toListOf, at, each, _Just, to, set, makeLenses)
+import Control.Lens (view, toListOf, at, each, _Just, to, set)
 import Data.List (tail, nub)
 import Data.List qualified as List
 import Data.Map.Strict (fromListWith, lookup)
-import Data.Proxy
 import Data.Text qualified as Text
-import Database.PostgreSQL.Simple
-import Database.PostgreSQL.Simple.SqlQQ
-import Gargantext.Core
+import Database.PostgreSQL.Simple ( Only(Only), In(In) )
+import Database.PostgreSQL.Simple.SqlQQ ( sql )
+import Gargantext.Core ( fromDBid, HasDBid(toDBid) )
 import Gargantext.Core.Types.Main (NodeTree(..), Tree(..))
 import Gargantext.Database.Admin.Config ()
 import Gargantext.Database.Admin.Types.Hyperdata.Any (HyperdataAny)
diff --git a/src/Gargantext/Database/Schema/NgramsPostag.hs b/src/Gargantext/Database/Schema/NgramsPostag.hs
index 51b7b57d864d123bcde8dc91d1b1978280f2debd..8cdee441e6f82404317453a866ef2fe3e39f2930 100644
--- a/src/Gargantext/Database/Schema/NgramsPostag.hs
+++ b/src/Gargantext/Database/Schema/NgramsPostag.hs
@@ -20,7 +20,6 @@ ngrams in NgramsTerm Lists.
 module Gargantext.Database.Schema.NgramsPostag
   where
 
-import Control.Lens ( makeLenses )
 import Database.PostgreSQL.Simple qualified as PGS
 import Gargantext.Database.Schema.Prelude ( Column, SqlInt4, SqlText, ToField(toField), toRow )
 import Gargantext.Prelude
diff --git a/src/Gargantext/Database/Schema/User.hs b/src/Gargantext/Database/Schema/User.hs
index c653b639fb0b4238030644966e00c37dbdbb8929..90fa4156884895130a56c1b75481b1977d0e9084 100644
--- a/src/Gargantext/Database/Schema/User.hs
+++ b/src/Gargantext/Database/Schema/User.hs
@@ -21,7 +21,6 @@ Functions to deal with users, database side.
 
 module Gargantext.Database.Schema.User where
 
-import Data.Aeson.TH (deriveJSON)
 import Data.Morpheus.Types (GQLType(typeOptions))
 import Data.Time (UTCTime)
 import Database.PostgreSQL.Simple.FromField (FromField, fromField)
diff --git a/src/Gargantext/Utils/JohnSnowNLP.hs b/src/Gargantext/Utils/JohnSnowNLP.hs
index c51cce5602cdf9d28a3a8b4c0cf2dd53923e53a4..ac013442fd3988d91ebbdd324f1ff4a459555985 100644
--- a/src/Gargantext/Utils/JohnSnowNLP.hs
+++ b/src/Gargantext/Utils/JohnSnowNLP.hs
@@ -13,13 +13,12 @@ Portability : POSIX
 
 module Gargantext.Utils.JohnSnowNLP where
 
-import Control.Lens
-import Data.Aeson (encode, ToJSON, toJSON, FromJSON, parseJSON, Value(..), (.:), (.:?))
-import Data.Aeson.TH (deriveJSON)
+import Control.Lens ( FunctorWithIndex(imap) )
+import Data.Aeson (encode, Value(..), (.:), (.:?))
 import Data.Aeson.Types (prependFailure, typeMismatch)
 import Data.List.Safe qualified as LS
 import Data.Map.Strict qualified as Map
-import Data.Text hiding (map, group, filter, concat, zip)
+import Data.Text (unpack)
 import Gargantext.Core (Lang(..))
 import Gargantext.Core.Text.Terms.Multi.PosTagging.Types
 import Gargantext.Core.Types (POS(..))
diff --git a/src/Gargantext/Utils/SpacyNLP/Types.hs b/src/Gargantext/Utils/SpacyNLP/Types.hs
index a43cd69aca53ea3f3eaeefff0e35a0bbb0062610..43ab346fca1bb6c29c21debf99b8966095f972de 100644
--- a/src/Gargantext/Utils/SpacyNLP/Types.hs
+++ b/src/Gargantext/Utils/SpacyNLP/Types.hs
@@ -17,9 +17,6 @@ Server to be used: https://gitlab.iscpif.fr/gargantext/spacy-server
 
 module Gargantext.Utils.SpacyNLP.Types where
 
-import Control.Lens
-import Data.Aeson.TH (deriveJSON)
-import Data.Text hiding (map, group, filter, concat, zip)
 import Gargantext.Core.Types (POS(..), NER(..))
 import Gargantext.Core.Utils.Prefix (unPrefix)
 import Gargantext.Prelude
diff --git a/src/Gargantext/Utils/UTCTime.hs b/src/Gargantext/Utils/UTCTime.hs
index 8f243d12be4f132c37fe0de66a92a3356bdc1b4a..4414c9e45fcd7593a4761f40b8bc3e154bb2ded9 100644
--- a/src/Gargantext/Utils/UTCTime.hs
+++ b/src/Gargantext/Utils/UTCTime.hs
@@ -16,7 +16,6 @@ Portability : POSIX
 
 module Gargantext.Utils.UTCTime where
 
-import Data.Aeson (FromJSON, ToJSON)
 import Data.Morpheus.Kind (SCALAR)
 import Data.Morpheus.Types (GQLType(..), DecodeScalar(..), EncodeScalar(..))
 import Data.Morpheus.Types qualified as DMT